diff --git a/src/Makefile_Efl_Mono.am b/src/Makefile_Efl_Mono.am index 54f950d253..eb908f8e31 100644 --- a/src/Makefile_Efl_Mono.am +++ b/src/Makefile_Efl_Mono.am @@ -1,502 +1,502 @@ efl_custom_exports_mono_files = \ lib/efl_mono/efl_custom_exports_mono.c efl_eo_mono_files = \ bindings/mono/eo_mono/iwrapper.cs \ bindings/mono/eo_mono/FunctionWrapper.cs \ bindings/mono/eo_mono/NativeModule.cs \ bindings/mono/eo_mono/workaround.cs if HAVE_WIN32 efl_eo_mono_files += \ bindings/mono/eo_mono/FunctionWrapper_Windows.cs \ bindings/mono/eo_mono/NativeModule_Windows.cs else efl_eo_mono_files += \ bindings/mono/eo_mono/FunctionWrapper_Unix.cs \ bindings/mono/eo_mono/NativeModule_Unix.cs endif efl_eina_mono_files = \ bindings/mono/eina_mono/eina_config.cs \ bindings/mono/eina_mono/eina_array.cs \ bindings/mono/eina_mono/eina_hash.cs \ bindings/mono/eina_mono/eina_list.cs \ bindings/mono/eina_mono/eina_inarray.cs \ bindings/mono/eina_mono/eina_inlist.cs \ bindings/mono/eina_mono/eina_iterator.cs \ bindings/mono/eina_mono/eina_container_common.cs \ bindings/mono/eina_mono/eina_common.cs \ bindings/mono/eina_mono/eina_log.cs \ bindings/mono/eina_mono/eina_binbuf.cs \ bindings/mono/eina_mono/eina_slice.cs \ bindings/mono/eina_mono/eina_stringshare.cs \ bindings/mono/eina_mono/eina_error.cs \ bindings/mono/eina_mono/eina_value.cs \ bindings/mono/eina_mono/eina_promises.cs \ bindings/mono/eina_mono/eina_accessor.cs \ bindings/mono/eina_mono/eina_strbuf.cs efl_eldbus_mono_files = \ bindings/mono/eldbus_mono/eldbus_common.cs \ bindings/mono/eldbus_mono/eldbus_config.cs \ bindings/mono/eldbus_mono/eldbus_connection.cs \ bindings/mono/eldbus_mono/eldbus_message.cs \ bindings/mono/eldbus_mono/eldbus_object.cs \ bindings/mono/eldbus_mono/eldbus_pending.cs \ bindings/mono/eldbus_mono/eldbus_proxy.cs \ bindings/mono/eldbus_mono/eldbus_service.cs # Static C# source files don't go into a _SOURCES var as the dll target # is custom built instead of through _LTLIBRARIES/_LIBRARIES lib_efl_mono_libefl_mono_dll_sources = \ bindings/mono/efl_mono/efl_all.cs \ bindings/mono/efl_mono/efl_csharp_application.cs \ $(efl_eo_mono_files) \ $(efl_eina_mono_files) \ $(efl_eldbus_mono_files) efl_mono_test_files = \ tests/efl_mono/dummy_test_object.eo \ tests/efl_mono/dummy_test_iface.eo \ tests/efl_mono/dummy_another_iface.eo \ tests/efl_mono/dummy_child.eo \ tests/efl_mono/dummy_numberwrapper.eo \ tests/efl_mono/mono_test_driver.sh EXTRA_DIST2 += \ $(lib_efl_mono_libefl_mono_dll_sources) \ $(efl_mono_test_files) \ bindings/mono/efl_mono/efl_libs.cs.in \ bindings/mono/efl_mono/efl_libs.csv.in if HAVE_CSHARP bin_PROGRAMS += bin/eolian_mono/eolian_mono bin_eolian_mono_eolian_mono_SOURCES = \ bin/eolian_mono/eolian_mono.cc \ bin/eolian_mono/eolian/mono/documentation.hh \ bin/eolian_mono/eolian/mono/type.hh \ bin/eolian_mono/eolian/mono/marshall_annotation.hh \ bin/eolian_mono/eolian/mono/async_function_definition.hh \ bin/eolian_mono/eolian/mono/function_pointer.hh \ bin/eolian_mono/eolian/mono/function_definition.hh \ bin/eolian_mono/eolian/mono/name_helpers.hh \ bin/eolian_mono/eolian/mono/function_declaration.hh \ bin/eolian_mono/eolian/mono/helpers.hh \ bin/eolian_mono/eolian/mono/function_helpers.hh \ bin/eolian_mono/eolian/mono/marshall_type_impl.hh \ bin/eolian_mono/eolian/mono/function_registration.hh \ bin/eolian_mono/eolian/mono/enum_definition.hh \ bin/eolian_mono/eolian/mono/struct_definition.hh \ bin/eolian_mono/eolian/mono/part_definition.hh \ bin/eolian_mono/eolian/mono/struct_fields.hh \ bin/eolian_mono/eolian/mono/parameter.hh \ bin/eolian_mono/eolian/mono/variable_definition.hh \ bin/eolian_mono/eolian/mono/utils.hh \ bin/eolian_mono/eolian/mono/using_decl.hh \ bin/eolian_mono/eolian/mono/marshall_type.hh \ bin/eolian_mono/eolian/mono/klass.hh \ bin/eolian_mono/eolian/mono/type_impl.hh \ bin/eolian_mono/eolian/mono/events.hh \ bin/eolian_mono/eolian/mono/generation_contexts.hh bin_eolian_mono_eolian_mono_CXXFLAGS = -I$(top_builddir)/src/lib/efl \ -I$(top_srcdir)/src/lib/eolian_cxx/ \ -I$(top_srcdir)/src/bin/eolian_mono/ \ @CHECK_CFLAGS@ @EINA_CFLAGS@ @EINA_CXX_CFLAGS@ @EO_CXX_CFLAGS@ @ECORE_CXX_CFLAGS@ @EO_CFLAGS@ \ -I$(top_srcdir)/src/bindings/cxx/eina_cxx \ @EOLIAN_CXX_CFLAGS@ @EOLIAN_CFLAGS@ bin_eolian_mono_eolian_mono_LDADD = @CHECK_LIBS@ @USE_EOLIAN_LIBS@ bin_eolian_mono_eolian_mono_DEPENDENCIES = @USE_EOLIAN_INTERNAL_LIBS@ # Helper for other modules using Eolian_Mono, include only after Makefile_Eolian_Helper.am include Makefile_Eolian_Mono_Helper.am ### Efl C Sharp Binding evas_eolian_blacklisted_files = \ lib/evas/canvas/efl_canvas_text.eo.cs \ lib/evas/canvas/efl_canvas_scene3d.eo.cs \ lib/evas/canvas/evas_canvas3d_camera.eo.cs \ lib/evas/canvas/evas_canvas3d_light.eo.cs \ lib/evas/canvas/evas_canvas3d_material.eo.cs \ lib/evas/canvas/evas_canvas3d_mesh.eo.cs \ lib/evas/canvas/evas_canvas3d_node.eo.cs \ lib/evas/canvas/evas_canvas3d_object.eo.cs \ lib/evas/canvas/evas_canvas3d_primitive.eo.cs \ lib/evas/canvas/evas_canvas3d_scene.eo.cs \ lib/evas/canvas/evas_canvas3d_texture.eo.cs \ lib/evas/canvas/efl_canvas_vg_object.eo.cs \ lib/evas/canvas/efl_vg.eo.cs \ lib/evas/canvas/efl_vg_container.eo.cs \ lib/evas/canvas/efl_vg_gradient.eo.cs \ lib/evas/canvas/efl_vg_gradient_radial.eo.cs \ lib/evas/canvas/efl_vg_gradient_linear.eo.cs \ lib/evas/canvas/efl_vg_root_node.eo.cs \ lib/evas/canvas/efl_vg_shape.eo.cs efl_eolian_blacklisted_files = \ lib/efl/interfaces/efl_io_buffer.eo.cs \ lib/efl/interfaces/efl_io_positioner.eo.cs \ lib/efl/interfaces/efl_io_queue.eo.cs \ lib/efl/interfaces/efl_io_sizer.eo.cs ecore_eolian_blacklisted_files = \ lib/ecore/efl_io_closer_fd.eo.cs \ lib/ecore/efl_io_buffered_stream.eo.cs \ lib/ecore/efl_io_positioner_fd.eo.cs \ lib/ecore/efl_io_reader_fd.eo.cs \ lib/ecore/efl_io_writer_fd.eo.cs \ lib/ecore/efl_io_copier_fd.eo.cs \ lib/ecore/efl_io_sizer_fd.eo.cs \ lib/ecore/efl_io_stdin.eo.cs \ lib/ecore/efl_io_stdout.eo.cs \ lib/ecore/efl_io_stderr.eo.cs \ lib/ecore/efl_io_file.eo.cs \ lib/ecore/efl_io_copier.eo.cs eo_eolian_blacklisted_files = \ lib/eo/efl_object_override.eo.cs elementary_eolian_blacklisted_files = \ lib/elementary/elm_web.eo.cs \ lib/elementary/elm_map.eo.cs \ lib/elementary/elm_combobox.eo.cs \ -lib/elementary/elm_list.eo.cs \ +lib/elementary/elm_list_eo.cs \ lib/elementary/elm_genlist_eo.cs \ lib/elementary/elm_view_list.eo.cs \ lib/elementary/elm_genlist_item_eo.cs \ lib/elementary/elm_gengrid_eo.cs \ lib/elementary/elm_glview_eo.cs efl_mono_blacklisted_files = \ $(evas_eolian_blacklisted_files) \ $(efl_eolian_blacklisted_files) \ $(ecore_eolian_blacklisted_files) \ $(eo_eolian_blacklisted_files) \ $(elementary_eolian_blacklisted_files) efl_eolian_mono_files = \ $(filter-out $(eo_eolian_blacklisted_files),$(eo_eolian_files:%.eo=%.eo.cs)) \ $(filter-out $(ecore_eolian_blacklisted_files),$(ecore_eolian_files_public:%.eo=%.eo.cs)) \ $(ecore_eolian_type_files:%.eot=%.eot.cs) \ $(filter-out $(efl_eolian_blacklisted_files),$(efl_eolian_files:%.eo=%.eo.cs)) \ $(filter-out $(edje_eolian_blacklisted_files),$(edje_eolian_files:%.eo=%.eo.cs)) \ $(filter-out $(elementary_eolian_blacklisted_files),$(elm_public_eolian_files:%.eo=%.eo.cs)) \ $(efl_eolian_type_files:%.eot=%.eot.cs) \ $(edje_eolian_type_files:%.eot=%.eot.cs) \ $(elm_eolian_type_files:%.eot=%.eot.cs) \ $(filter-out $(evas_eolian_blacklisted_files),$(evas_canvas_eolian_pub_files:%.eo=%.eo.cs)) \ lib/evas/canvas/efl_canvas_image.eo.cs \ $(evas_canvas_eolian_type_files:%.eot=%.eot.cs) \ lib/eo/eina_types.eot.cs \ lib/ecore/efl_loop_timer.eo.cs efl_mono_files_gen =\ $(efl_eolian_mono_files) \ $(builddir)/bindings/mono/efl_mono/efl_libs.cs installed_eflmonomainheadersdir = $(includedir)/efl-mono-@VMAJ@/ nodist_installed_eflmonomainheaders_DATA = $(efl_eolian_files:%.eo=%.eo.cs) $(builddir)/bindings/mono/efl_mono/efl_libs.csv CLEANFILES += $(efl_mono_files_gen) $(efl_mono_blacklisted_files) \ $(builddir)/lib/efl_mono/libefl_mono.dll \ $(builddir)/lib/efl_mono/libefl_mono.xml \ $(builddir)/lib/efl_mono/libefl_mono.dll.config if HAVE_WIN32 MCSFLAGS ?= MCSFLAGS += -define:WIN32 endif # Efl Custom Exports Mono auxiliary library lib_LTLIBRARIES += \ lib/efl_mono/libeflcustomexportsmono.la lib_efl_mono_libeflcustomexportsmono_la_SOURCES = \ $(efl_custom_exports_mono_files) lib_efl_mono_libeflcustomexportsmono_la_CPPFLAGS = \ -DEFL_BETA_API_SUPPORT \ -I$(top_builddir)/src/lib/efl \ @EFL_CUSTOM_EXPORTS_MONO_CFLAGS@ lib_efl_mono_libeflcustomexportsmono_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ lib_efl_mono_libeflcustomexportsmono_la_LIBADD = @EFL_CUSTOM_EXPORTS_MONO_LIBS@ lib_efl_mono_libeflcustomexportsmono_la_DEPENDENCIES = @EFL_CUSTOM_EXPORTS_MONO_INTERNAL_LIBS@ #Efl Mono - C Sharp binding library libefl_mono_dll_MCSFLAGS = -doc:lib/efl_mono/libefl_mono.xml lib/efl_mono/libefl_mono.dll: $(efl_mono_files_dist) lib/efl_mono/$(am__dirstamp) $(lib_efl_mono_libefl_mono_dll_sources) $(efl_mono_files_gen) lib/efl_mono/libefl_mono.dll.config @rm -f lib/efl_mono/libefl_mono.dll $(AM_V_MCS) $(MCS) $(MCSFLAGS) $(libefl_mono_dll_MCSFLAGS) -out:$@ -t:library $(filter %.cs, $(^)) lib/efl_mono/libefl_mono.dll.config: echo "" > $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo "" >> $@ EFL_INSTALL_EXEC_HOOK += \ $(MKDIR_P) @eflmonodlldir@; \ cp -f $(builddir)/lib/efl_mono/libefl_mono.dll @eflmonodlldir@/libefl_mono.dll; \ cp -f $(builddir)/lib/efl_mono/libefl_mono.xml @eflmonodlldir@/libefl_mono.xml; \ $(MKDIR_P) $(DESTDIR)$(datadir)/efl_mono; \ cp -f $(builddir)/bindings/mono/efl_mono/efl_libs.csv $(DESTDIR)$(datadir)/efl_mono/efl_libs.csv; all-local: lib/efl_mono/libefl_mono.dll uninstall-local: rm -rf @eflmonodlldir@/libefl_mono.dll rm -rf @eflmonodlldir@/libefl_mono.xml rm -rf $(DESTDIR)$(datadir)/efl_mono rm -rf src/tests/efl_mono ### MSBuild bin_PROGRAMS += bin/efl_mono_msbuild_gen/efl_mono_msbuild_gen bin_efl_mono_msbuild_gen_efl_mono_msbuild_gen_SOURCES = \ bin/efl_mono_msbuild_gen/main.cc bin_efl_mono_msbuild_gen_efl_mono_msbuild_gen_CXXFLAGS = \ -I$(top_srcdir)/src/lib/efl \ -I$(top_builddir)/src/lib/efl \ -I$(top_srcdir)/src/lib/eolian_cxx/ \ -I$(top_srcdir)/src/bindings/cxx/eina_cxx \ @EINA_CFLAGS@ @EINA_CXX_CFLAGS@ @EO_CXX_CFLAGS@ \ @ECORE_CXX_CFLAGS@ @EO_CFLAGS@ @EOLIAN_CXX_CFLAGS@ @EOLIAN_CFLAGS@ bin_efl_mono_msbuild_gen_efl_mono_msbuild_gen_LDADD = @CHECK_LIBS@ @USE_EOLIAN_LIBS@ bin_efl_mono_msbuild_gen_efl_mono_msbuild_gen_DEPENDENCIES = @USE_EOLIAN_INTERNAL_LIBS@ # Helper for other modules using Efl_Mono_MSBuild_Gen include Makefile_Efl_Mono_MSBuild_Gen_Helper.am # Efl Mono DLL for MSBuild ../libefl_mono.csproj: $(efl_mono_files_dist) lib/efl_mono/$(am__dirstamp) $(efl_mono_files_gen) $(_EFL_MONO_MSBUILD_GEN_DEP) @rm -f $@ $(EFL_MONO_MSBUILD_GEN) $(MSBUILD_GEN_FLAGS) -o $@ -a libefl_mono.dll -t library $(patsubst %.cs,src/%.cs,$(filter %.cs, $(^))) CSPROJS_SUBDIRS = \ examples/eina \ examples/efl_mono msbuildcsprojs: ../libefl_mono.csproj @for d in $(CSPROJS_SUBDIRS); do \ echo "Making MSBuild C Sharp projects in $$d"; \ $(MAKE) $(AM_MAKEFLAGS) -C $$d msbuildcsprojs || exit 1; \ done ### Some hard-coded runtime dependencies for tests and examples TEST_PATHS = $(abs_top_builddir)/src/lib/efl_mono:$(abs_top_builddir)/src/lib/efl_mono/.libs:$(abs_top_builddir)/src/lib/eina/.libs:$(abs_top_builddir)/src/lib/ecore/.libs:$(abs_top_builddir)/src/lib/ecore_evas/.libs:$(abs_top_builddir)/src/lib/eo/.libs:$(abs_top_builddir)/src/lib/evas/.libs:$(abs_top_builddir)/src/lib/emile/.libs:$(abs_top_builddir)/src/lib/eet/.libs:$(abs_top_builddir)/src/lib/efl/.libs:$(abs_top_builddir)/src/ecore-file/.libs:$(abs_top_builddir)/src/lib/efl-input/.libs:$(abs_top_builddir)/src/lib/edje/.libs:$(abs_top_builddir)/src/lib/ethumb/.libs:$(abs_top_builddir)/src/lib/ethumb-client/.libs:$(abs_top_builddir)/src/lib/emotion/.libs:$(abs_top_builddir)/src/lib/ecore-imf/.libs:$(abs_top_builddir)/src/lib/ecore-con/.libs:$(abs_top_builddir)/src/lib/eldbus/.libs:$(abs_top_builddir)/src/lib/efreet/.libs:$(abs_top_builddir)/src/lib/efreet-mime/.libs:$(abs_top_builddir)/src/lib/efreet-trash/.libs:$(abs_top_builddir)/src/lib/eio/.libs:$(abs_top_builddir)/src/lib/elocation/.libs:$(abs_top_builddir)/src/lib/elementary/.libs:$(abs_top_builddir)/src/tests/efl_mono/.libs WIN_ADD_TEST_PATHS = $(abs_top_builddir)/src/lib/evil/.libs:$(abs_top_builddir)/src/lib/ecore_win32/.libs:$(abs_top_builddir)/src/lib/ector/.libs:$(abs_top_builddir)/src/lib/ecore_con/.libs:$(abs_top_builddir)/src/lib/ecore_imf/.libs:$(abs_top_builddir)/src/lib/ecore_file/.libs:$(abs_top_builddir)/src/lib/ecore_input/.libs:$(abs_top_builddir)/src/ethumb_client/.libs:$(abs_top_builddir)/src/tests/efl_mono/.libs ### Rules for generating the .cs files ALL_EO_REFS = -r $(top_builddir)/src/bindings/mono/efl_mono/efl_libs.csv lib/eo/%.eo.cs: lib/eo/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport eo -o $@ $(ALL_EO_REFS) $< lib/ecore/%.eo.cs: lib/ecore/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport ecore -o $@ $(ALL_EO_REFS) $< lib/evas/%.eo.cs: lib/evas/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport evas -o $@ $(ALL_EO_REFS) $< lib/efl/%.eo.cs: lib/efl/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport efl -o $@ $(ALL_EO_REFS) $< lib/edje/%.eo.cs: lib/edje/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport edje -o $@ $(ALL_EO_REFS) $< lib/elementary/%.eo.cs: lib/elementary/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport elementary -o $@ $(ALL_EO_REFS) $< lib/ecore/%.eot.cs: lib/ecore/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport ecore -o $@ $(ALL_EO_REFS) $< lib/eo/%.eot.cs: lib/eo/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport eo -o $@ $(ALL_EO_REFS) $< lib/evas/%.eot.cs: lib/evas/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport evas -o $@ $(ALL_EO_REFS) $< lib/efl/%.eot.cs: lib/efl/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport efl -o $@ $(ALL_EO_REFS) $< lib/edje/%.eot.cs: lib/edje/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport edje -o $@ $(ALL_EO_REFS) $< lib/elementary/%.eot.cs: lib/elementary/%.eot $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport elementary -o $@ $(ALL_EO_REFS) $< ### Tests if EFL_ENABLE_TESTS # Intermediate C test native library check_LTLIBRARIES += tests/efl_mono/libefl_mono_native_test.la tests_efl_mono_libefl_mono_native_test_la_SOURCES = tests/efl_mono/libefl_mono_native_test.c tests_efl_mono_libefl_mono_native_test_la_CPPFLAGS = \ -I$(builddir)/tests/efl_mono \ @CHECK_CFLAGS@ @EINA_CFLAGS@ @EO_CFLAGS@ @ECORE_CFLAGS@ @ELDBUS_CFLAGS@ tests_efl_mono_libefl_mono_native_test_la_LIBADD = \ @CHECK_LIBS@ @USE_EINA_LIBS@ @USE_EO_LIBS@ @USE_ECORE_LIBS@ @USE_ELDBUS_LIBS@ tests_efl_mono_libefl_mono_native_test_la_LDFLAGS = -rpath $(abs_top_builddir)/tests/efl_mono @EFL_LTLIBRARY_FLAGS@ tests_efl_mono_libefl_mono_native_test_la_DEPENDENCIES = @USE_EINA_INTERNAL_LIBS@ @USE_EO_INTERNAL_LIBS@ @USE_ECORE_INTERNAL_LIBS@ @USE_ELDBUS_INTERNAL_LIBS@ tests_efl_mono_libefl_mono_native_test_la_LIBTOOLFLAGS = --tag=disable-static tests/efl_mono/libefl_mono_native_test.c: \ tests/efl_mono/dummy_test_object.eo.h \ tests/efl_mono/dummy_test_object.eo.c \ tests/efl_mono/dummy_test_iface.eo.h \ tests/efl_mono/dummy_test_iface.eo.c \ tests/efl_mono/dummy_another_iface.eo.h \ tests/efl_mono/dummy_another_iface.eo.c \ tests/efl_mono/dummy_child.eo.h \ tests/efl_mono/dummy_child.eo.c \ tests/efl_mono/dummy_numberwrapper.eo.h \ tests/efl_mono/dummy_numberwrapper.eo.c \ tests/efl_mono/dummy_inherit_iface.eo.h \ tests/efl_mono/dummy_inherit_iface.eo.c \ tests/efl_mono/dummy_inherit_helper.eo.h \ tests/efl_mono/dummy_inherit_helper.eo.c # Intermediate C Sharp test DLL efl_mono_test_eolian_mono_files = tests/efl_mono/dummy_test_object.eo.cs \ tests/efl_mono/dummy_test_iface.eo.cs \ tests/efl_mono/dummy_another_iface.eo.cs \ tests/efl_mono/dummy_child.eo.cs \ tests/efl_mono/dummy_numberwrapper.eo.cs \ tests/efl_mono/dummy_inherit_iface.eo.cs \ tests/efl_mono/dummy_inherit_helper.eo.cs tests/efl_mono/libefl_mono_test.dll: $(efl_mono_test_eolian_mono_files) tests/efl_mono/$(am__dirstamp) lib/efl_mono/libefl_mono.dll tests/efl_mono/libefl_mono_native_test.la tests/efl_mono/libefl_mono_test.dll.config @rm -f tests/efl_mono/libefl_mono_test.dll $(AM_V_MCS) $(MCS) $(MCSFLAGS) -r:$(abs_builddir)/lib/efl_mono/libefl_mono.dll -out:$@ -t:library $(filter %.cs, $(^)) tests/efl_mono/efl_mono$(EXEEXT).config: echo "" > $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo "" >> $@ tests/efl_mono/libefl_mono_test.dll.config: echo "" > $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo " " >> $@ echo "" >> $@ # C Sharp test executable AM_TESTS_ENVIRONMENT += MONO='mono' AM_TESTS_ENVIRONMENT += MONO_BUILDPATH='$(abs_top_builddir)' AM_TESTS_ENVIRONMENT += MONO_PATH='$(TEST_PATHS)' AM_TESTS_ENVIRONMENT += EXEEXT='$(EXEEXT)' if HAVE_WIN32 AM_TESTS_ENVIRONMENT += PATH='$(PATH):$(TEST_PATHS):$(WIN_ADD_TEST_PATHS)' else AM_TESTS_ENVIRONMENT += LD_LIBRARY_PATH='$(LD_LIBRARY_PATH):$(TEST_PATHS)' check_PROGRAMS += tests/efl_mono/efl_mono TESTS += tests/efl_mono/mono_test_driver.sh tests_efl_mono_efl_mono_SOURCES = \ tests/efl_mono/Main.cs \ tests/efl_mono/TestUtils.cs \ tests/efl_mono/BasicDirection.cs \ tests/efl_mono/Eina.cs \ tests/efl_mono/Eldbus.cs \ tests/efl_mono/Eo.cs \ tests/efl_mono/EoPromises.cs \ tests/efl_mono/Errors.cs \ tests/efl_mono/Events.cs \ tests/efl_mono/FunctionPointers.cs \ tests/efl_mono/FunctionPointerMarshalling.cs \ tests/efl_mono/Parts.cs \ tests/efl_mono/Promises.cs \ tests/efl_mono/Strbuf.cs \ tests/efl_mono/Strings.cs \ tests/efl_mono/Structs.cs \ tests/efl_mono/Value.cs \ tests/efl_mono/ValueEolian.cs \ tests/efl_mono/EinaTestData.cs \ tests/efl_mono/StructHelpers.cs tests/efl_mono/efl_mono$(EXEEXT): $(tests_efl_mono_efl_mono_SOURCES) tests/efl_mono/$(am__dirstamp) lib/efl_mono/libefl_mono.dll tests/efl_mono/libefl_mono_test.dll tests/efl_mono/efl_mono$(EXEEXT).config @rm -f $@ $(AM_V_MCS) $(MCS) $(MCSFLAGS) -r:$(abs_top_builddir)/src/lib/efl_mono/libefl_mono.dll -r:$(abs_top_builddir)/src/tests/efl_mono/libefl_mono_test.dll -out:$@ $(filter %.cs, $(^)) # Rule for generating the .cs files tests/efl_mono/%.eo.cs: tests/efl_mono/%.eo $(_EOLIAN_MONO_DEP) $(AM_V_EOLMONO) \ $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport "@DLIB_PREFIX_MONO@efl_mono_native_test@DLIB_SUFFIX_MONO@" -o $@ $(ALL_EO_REFS) $< CLEANFILES += tests/efl_mono/libefl_mono_test.dll tests/efl_mono/dummy_test_object.eo.cs tests/efl_mono/dummy_child.eo.cs tests/efl_mono/dummy_numberwrapper.eo.cs tests/efl_mono/dummy_test_object.eo.c tests/efl_mono/dummy_child.eo.c tests/efl_mono/dummy_numberwrapper.eo.c tests/efl_mono/dummy_test_object.eo.h tests/efl_mono/dummy_child.eo.h tests/efl_mono/dummy_numberwrapper.eo.h tests/efl_mono/efl_mono.config endif endif endif diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index e2a26c9e96..dc9610a56d 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -1,1866 +1,1872 @@ ### Library elm_public_eolian_files = \ lib/elementary/efl_ui_widget.eo \ lib/elementary/efl_ui_bg.eo \ lib/elementary/efl_ui_button.eo \ lib/elementary/efl_ui_calendar.eo \ lib/elementary/efl_ui_calendar_item.eo \ lib/elementary/efl_ui_check.eo \ lib/elementary/efl_ui_flip.eo \ lib/elementary/efl_ui_frame.eo \ lib/elementary/efl_ui_stack.eo \ lib/elementary/efl_ui_image.eo \ lib/elementary/efl_ui_image_zoomable.eo \ lib/elementary/efl_ui_layout.eo \ lib/elementary/efl_ui_layout_base.eo \ lib/elementary/efl_ui_nstate.eo \ lib/elementary/efl_ui_navigation_bar.eo \ lib/elementary/efl_ui_navigation_bar_part.eo \ lib/elementary/efl_ui_navigation_bar_part_back_button.eo \ lib/elementary/efl_ui_navigation_layout.eo \ lib/elementary/efl_ui_panes.eo \ lib/elementary/efl_ui_progressbar.eo \ lib/elementary/efl_ui_radio.eo \ lib/elementary/efl_ui_slider.eo \ lib/elementary/efl_ui_slider_interval.eo \ lib/elementary/efl_ui_spin.eo \ lib/elementary/efl_ui_spin_button.eo \ lib/elementary/efl_ui_datepicker.eo \ lib/elementary/efl_ui_timepicker.eo \ lib/elementary/efl_ui_tags.eo \ lib/elementary/efl_ui_panel.eo \ lib/elementary/efl_ui_video.eo \ lib/elementary/efl_ui_win.eo \ lib/elementary/efl_ui_win_inlined.eo \ lib/elementary/efl_ui_win_socket.eo \ lib/elementary/efl_ui_box.eo \ lib/elementary/efl_ui_box_flow.eo \ lib/elementary/efl_ui_box_stack.eo \ lib/elementary/efl_ui_table.eo \ lib/elementary/efl_ui_table_static.eo \ lib/elementary/efl_text_interactive.eo \ lib/elementary/efl_ui_text.eo \ lib/elementary/efl_ui_popup.eo \ lib/elementary/efl_ui_popup_part_backwall.eo \ lib/elementary/efl_ui_alert_popup.eo \ lib/elementary/efl_ui_alert_popup_part.eo \ lib/elementary/efl_ui_scroll_alert_popup.eo \ lib/elementary/efl_ui_scroll_alert_popup_part.eo \ lib/elementary/efl_ui_text_alert_popup.eo \ lib/elementary/efl_ui_text_alert_popup_part.eo \ lib/elementary/efl_ui_anchor_popup.eo \ lib/elementary/efl_ui_text_editable.eo \ lib/elementary/efl_ui_text_async.eo \ lib/elementary/efl_ui_text_factory_images.eo \ lib/elementary/efl_ui_text_factory_emoticons.eo \ lib/elementary/efl_ui_text_factory_fallback.eo \ lib/elementary/efl_ui_textpath.eo \ lib/elementary/efl_ui_l10n.eo \ lib/elementary/efl_ui_clock.eo \ lib/elementary/efl_ui_image_factory.eo \ lib/elementary/efl_ui_focus_manager.eo \ lib/elementary/efl_ui_focus_manager_calc.eo \ lib/elementary/efl_ui_focus_manager_sub.eo \ lib/elementary/efl_ui_focus_manager_root_focus.eo \ lib/elementary/efl_ui_focus_object.eo \ lib/elementary/efl_ui_focus_layer.eo \ lib/elementary/efl_ui_focus_composition.eo \ lib/elementary/efl_ui_focus_util.eo \ lib/elementary/efl_ui_flip_part.eo \ lib/elementary/efl_ui_layout_factory.eo \ lib/elementary/efl_ui_layout_part.eo \ lib/elementary/efl_ui_layout_part_box.eo \ lib/elementary/efl_ui_layout_part_content.eo \ lib/elementary/efl_ui_layout_part_text.eo \ lib/elementary/efl_ui_layout_part_table.eo \ lib/elementary/efl_ui_layout_part_bg.eo \ lib/elementary/efl_ui_layout_part_legacy.eo \ lib/elementary/efl_ui_list_view.eo \ lib/elementary/efl_ui_list_view_model.eo \ lib/elementary/efl_ui_list_view_pan.eo \ lib/elementary/efl_ui_item.eo \ lib/elementary/efl_ui_list_item.eo \ lib/elementary/efl_ui_list_default_item_part_icon.eo \ lib/elementary/efl_ui_list_default_item_part_end.eo \ lib/elementary/efl_ui_list_default_item.eo \ lib/elementary/efl_ui_list_empty_item.eo \ lib/elementary/efl_ui_list.eo \ lib/elementary/efl_ui_grid_item.eo \ lib/elementary/efl_ui_grid_default_item_part_icon.eo \ lib/elementary/efl_ui_grid_default_item_part_end.eo \ lib/elementary/efl_ui_grid_default_item.eo \ lib/elementary/efl_ui_grid.eo \ lib/elementary/efl_ui_panes_part.eo \ lib/elementary/efl_ui_progressbar_part.eo \ lib/elementary/elm_slider.eo \ lib/elementary/elm_slider_part_indicator.eo \ lib/elementary/efl_ui_textpath_part.eo \ lib/elementary/efl_ui_widget_part.eo \ lib/elementary/efl_ui_widget_part_bg.eo \ lib/elementary/efl_ui_widget_part_shadow.eo \ lib/elementary/efl_ui_win_part.eo \ lib/elementary/efl_ui_scroller.eo \ lib/elementary/efl_ui_scroll_manager.eo \ lib/elementary/efl_ui_pan.eo \ lib/elementary/efl_access_object.eo \ lib/elementary/efl_access_action.eo \ lib/elementary/efl_access_component.eo \ lib/elementary/efl_access_editable_text.eo \ lib/elementary/efl_access_selection.eo \ lib/elementary/efl_access_text.eo \ lib/elementary/efl_access_value.eo \ lib/elementary/efl_access_widget_action.eo \ lib/elementary/efl_access_window.eo \ lib/elementary/efl_ui_theme.eo \ lib/elementary/efl_config_global.eo \ lib/elementary/elm_code_widget.eo \ lib/elementary/efl_ui_selection.eo \ lib/elementary/efl_ui_dnd.eo \ lib/elementary/efl_ui_dnd_container.eo \ lib/elementary/efl_ui_focus_manager_window_root.eo \ lib/elementary/efl_ui_pager.eo \ lib/elementary/efl_page_transition.eo \ lib/elementary/efl_page_transition_scroll.eo \ lib/elementary/efl_page_indicator.eo \ lib/elementary/efl_page_indicator_icon.eo \ lib/elementary/efl_ui_tab_pager.eo \ lib/elementary/efl_ui_tab_bar.eo \ lib/elementary/efl_ui_tab_page.eo \ lib/elementary/efl_ui_tab_page_part_tab.eo \ lib/elementary/efl_ui_widget_focus_manager.eo \ lib/elementary/efl_ui_text_part.eo \ lib/elementary/efl_ui_caching_factory.eo \ lib/elementary/efl_ui_widget_factory.eo \ lib/elementary/efl_ui_relative_layout.eo \ $(NULL) # More public files -- FIXME elm_public_eolian_files += \ lib/elementary/efl_ui_legacy.eo \ lib/elementary/efl_ui_button_legacy_part.eo \ lib/elementary/efl_ui_radio_legacy_part.eo \ lib/elementary/efl_ui_check_legacy_part.eo \ lib/elementary/efl_ui_progressbar_legacy_part.eo \ lib/elementary/elm_spinner.eo \ lib/elementary/elm_multibuttonentry.eo \ lib/elementary/elm_multibuttonentry_item.eo \ lib/elementary/elm_multibuttonentry_part.eo \ lib/elementary/elm_interface_scrollable.eo \ lib/elementary/elm_atspi_bridge.eo \ lib/elementary/elm_atspi_app_object.eo \ lib/elementary/efl_ui_image_zoomable_pan.eo \ lib/elementary/elm_pan.eo \ lib/elementary/elm_toolbar.eo \ lib/elementary/elm_toolbar_item.eo \ lib/elementary/elm_view_list.eo \ lib/elementary/elm_view_form.eo \ lib/elementary/elm_web.eo \ lib/elementary/elm_widget_item.eo \ lib/elementary/elm_widget_item_container.eo \ $(NULL) # Private classes (not exposed or shipped) elm_private_eolian_files = \ lib/elementary/efl_ui_internal_text_interactive.eo \ lib/elementary/efl_ui_internal_text_scroller.eo \ lib/elementary/efl_ui_focus_composition_adapter.eo \ lib/elementary/efl_ui_win_part.eo \ lib/elementary/efl_ui_focus_parent_provider.eo \ lib/elementary/efl_ui_focus_parent_provider_standard.eo \ lib/elementary/efl_ui_focus_parent_provider_gen.eo \ lib/elementary/efl_ui_state_model.eo \ tests/elementary/focus_test.eo \ tests/elementary/focus_test_sub_main.eo \ lib/elementary/efl_ui_selection_manager.eo \ lib/elementary/efl_datetime_manager.eo \ lib/elementary/efl_ui_list_view_relayout.eo \ lib/elementary/efl_ui_list_view_precise_layouter.eo \ lib/elementary/efl_ui_size_model.eo \ lib/elementary/efl_ui_homogeneous_model.eo \ lib/elementary/efl_ui_exact_model.eo \ lib/elementary/efl_ui_average_model.eo \ $(NULL) # Legacy classes - not part of public EO API elm_legacy_eolian_files = \ lib/elementary/efl_ui_clock_legacy.eo \ - lib/elementary/elm_list.eo \ lib/elementary/elm_map.eo \ lib/elementary/elm_map_pan.eo \ lib/elementary/elm_menu.eo \ lib/elementary/elm_notify.eo \ lib/elementary/elm_panel.eo \ lib/elementary/elm_player.eo \ lib/elementary/elm_plug.eo \ lib/elementary/elm_popup.eo \ lib/elementary/elm_route.eo \ lib/elementary/elm_scroller.eo \ lib/elementary/elm_sys_notify_interface.eo \ lib/elementary/elm_sys_notify.eo \ lib/elementary/elm_sys_notify_dbus.eo \ lib/elementary/elm_systray.eo \ lib/elementary/elm_menu_item.eo \ lib/elementary/elm_widget_item_static_focus.eo \ - lib/elementary/elm_list_item.eo \ lib/elementary/elm_popup_item.eo \ lib/elementary/elm_ctxpopup_part.eo \ lib/elementary/elm_dayselector_part.eo \ lib/elementary/elm_entry_part.eo \ lib/elementary/elm_fileselector_entry_part.eo \ lib/elementary/elm_flip_part.eo \ lib/elementary/elm_hover_part.eo \ lib/elementary/elm_mapbuf_part.eo \ lib/elementary/elm_naviframe_part.eo \ lib/elementary/elm_notify_part.eo \ lib/elementary/elm_panel_part.eo \ lib/elementary/elm_player_part.eo \ lib/elementary/elm_popup_part.eo \ lib/elementary/elm_scroller_part.eo \ lib/elementary/elm_label_part.eo \ lib/elementary/elm_actionslider_part.eo \ lib/elementary/elm_bubble_part.eo \ lib/elementary/elm_fileselector_part.eo \ lib/elementary/elm_mapbuf.eo \ lib/elementary/elm_naviframe.eo \ lib/elementary/elm_naviframe_item.eo \ lib/elementary/elm_photo.eo \ lib/elementary/elm_prefs.eo \ lib/elementary/elm_segment_control.eo \ lib/elementary/elm_segment_control_item.eo \ lib/elementary/elm_separator.eo \ lib/elementary/elm_slideshow.eo \ lib/elementary/elm_slideshow_item.eo \ lib/elementary/elm_table.eo \ lib/elementary/elm_thumb.eo \ $(NULL) elm_eolian_type_files = \ lib/elementary/elm_general.eot \ lib/elementary/efl_ui.eot \ lib/elementary/efl_ui_list_view_types.eot \ lib/elementary/efl_ui_selection_types.eot \ lib/elementary/efl_ui_dnd_types.eot elm_public_eolian_c = $(elm_public_eolian_files:%.eo=%.eo.c) elm_public_eolian_h = $(elm_public_eolian_files:%.eo=%.eo.h) \ $(elm_public_eolian_files:%.eo=%.eo.legacy.h) \ $(elm_eolian_type_files:%.eot=%.eot.h) elm_private_eolian_c = $(elm_private_eolian_files:%.eo=%.eo.c) elm_private_eolian_h = $(elm_private_eolian_files:%.eo=%.eo.h) elm_legacy_eolian_c = $(elm_legacy_eolian_files:%.eo=%.eo.c) elm_legacy_eolian_eo_h = $(elm_legacy_eolian_files:%.eo=%.eo.h) elm_legacy_eolian_legacy_h = $(elm_legacy_eolian_files:%.eo=%.eo.legacy.h) BUILT_SOURCES += \ $(elm_public_eolian_c) \ $(elm_public_eolian_h) \ $(elm_private_eolian_c) \ $(elm_private_eolian_h) \ $(elm_legacy_eolian_c) \ $(elm_legacy_eolian_eo_h) \ $(elm_legacy_eolian_legacy_h) elementaryeolianfilesdir = $(datadir)/eolian/include/elementary-@VMAJ@ elementaryeolianfiles_DATA = $(elm_public_eolian_files) $(elm_eolian_type_files) noinst_DATA += $(elm_legacy_eolian_eo_h) elm_legacy_eo_files = \ lib/elementary/efl_ui_bg_legacy_eo.c \ lib/elementary/efl_ui_button_legacy_eo.c \ lib/elementary/efl_ui_check_legacy_eo.c \ lib/elementary/efl_ui_flip_legacy_eo.c \ lib/elementary/efl_ui_frame_legacy_eo.c \ lib/elementary/efl_ui_image_legacy_eo.c \ lib/elementary/efl_ui_image_zoomable_eo.legacy.c \ lib/elementary/efl_ui_image_zoomable_legacy_eo.c \ lib/elementary/efl_ui_layout_legacy_eo.c \ lib/elementary/efl_ui_panes_eo.legacy.c \ lib/elementary/efl_ui_panes_legacy_eo.c \ lib/elementary/efl_ui_progressbar_legacy_eo.c \ lib/elementary/efl_ui_radio_eo.legacy.c \ lib/elementary/efl_ui_radio_legacy_eo.c \ lib/elementary/efl_ui_textpath_eo.legacy.c \ lib/elementary/efl_ui_textpath_legacy_eo.c \ lib/elementary/efl_ui_video_eo.legacy.c \ lib/elementary/efl_ui_video_legacy_eo.c \ lib/elementary/efl_ui_widget_eo.legacy.c \ lib/elementary/efl_ui_win_inlined_legacy_eo.c \ lib/elementary/efl_ui_win_legacy_eo.c \ lib/elementary/efl_ui_win_socket_legacy_eo.c \ lib/elementary/elm_access_eo.c \ lib/elementary/elm_access_eo.legacy.c \ lib/elementary/elm_actionslider_eo.c \ lib/elementary/elm_actionslider_eo.legacy.c \ lib/elementary/elm_box_eo.c \ lib/elementary/elm_box_eo.legacy.c \ lib/elementary/elm_bubble_eo.c \ lib/elementary/elm_bubble_eo.legacy.c \ lib/elementary/elm_calendar_eo.c \ lib/elementary/elm_calendar_eo.legacy.c \ lib/elementary/elm_calendar_item_eo.c \ lib/elementary/elm_clock_eo.c \ lib/elementary/elm_clock_eo.legacy.c \ lib/elementary/elm_code_widget_eo.legacy.c \ lib/elementary/elm_code_widget_legacy_eo.c \ lib/elementary/elm_color_item_eo.legacy.c \ lib/elementary/elm_color_item_eo.c \ lib/elementary/elm_colorselector_eo.legacy.c \ lib/elementary/elm_colorselector_eo.c \ lib/elementary/elm_conformant_eo.c \ lib/elementary/elm_ctxpopup_eo.legacy.c \ lib/elementary/elm_ctxpopup_eo.c \ lib/elementary/elm_ctxpopup_item_eo.legacy.c \ lib/elementary/elm_ctxpopup_item_eo.c \ lib/elementary/elm_dayselector_eo.legacy.c \ lib/elementary/elm_dayselector_eo.c \ lib/elementary/elm_dayselector_item_eo.c \ lib/elementary/elm_diskselector_eo.legacy.c \ lib/elementary/elm_diskselector_eo.c \ lib/elementary/elm_diskselector_item_eo.legacy.c \ lib/elementary/elm_diskselector_item_eo.c \ lib/elementary/elm_entry_eo.legacy.c \ lib/elementary/elm_entry_eo.c \ lib/elementary/elm_fileselector_button_eo.c \ lib/elementary/elm_fileselector_entry_eo.c \ lib/elementary/elm_fileselector_eo.legacy.c \ lib/elementary/elm_fileselector_eo.c \ lib/elementary/elm_flipselector_eo.legacy.c \ lib/elementary/elm_flipselector_eo.c \ lib/elementary/elm_flipselector_item_eo.legacy.c \ lib/elementary/elm_flipselector_item_eo.c \ lib/elementary/elm_gengrid_eo.legacy.c \ lib/elementary/elm_gengrid_eo.c \ lib/elementary/elm_gengrid_item_eo.legacy.c \ lib/elementary/elm_gengrid_item_eo.c \ lib/elementary/elm_gengrid_pan_eo.c \ lib/elementary/elm_genlist_eo.legacy.c \ lib/elementary/elm_genlist_eo.c \ lib/elementary/elm_genlist_item_eo.legacy.c \ lib/elementary/elm_genlist_item_eo.c \ lib/elementary/elm_genlist_pan_eo.c \ lib/elementary/elm_gesture_layer_eo.legacy.c \ lib/elementary/elm_gesture_layer_eo.c \ lib/elementary/elm_glview_eo.legacy.c \ lib/elementary/elm_glview_eo.c \ lib/elementary/elm_grid_eo.legacy.c \ lib/elementary/elm_grid_eo.c \ lib/elementary/elm_hover_eo.legacy.c \ lib/elementary/elm_hover_eo.c \ lib/elementary/elm_hoversel_eo.c \ lib/elementary/elm_hoversel_item_eo.c \ lib/elementary/elm_hoversel_item_eo.legacy.c \ lib/elementary/elm_icon_eo.c \ lib/elementary/elm_index_eo.c \ lib/elementary/elm_index_eo.legacy.c \ lib/elementary/elm_index_item_eo.c \ lib/elementary/elm_index_item_eo.legacy.c \ lib/elementary/elm_interface_fileselector_eo.c \ lib/elementary/elm_inwin_eo.c \ lib/elementary/elm_inwin_eo.legacy.c \ lib/elementary/elm_label_eo.c \ lib/elementary/elm_label_eo.legacy.c \ +lib/elementary/elm_list_eo.c \ +lib/elementary/elm_list_eo.legacy.c \ +lib/elementary/elm_list_item_eo.c \ +lib/elementary/elm_list_item_eo.legacy.c \ $(NULL) elm_legacy_eo_headers = \ lib/elementary/efl_ui_bg_eo.legacy.h \ lib/elementary/efl_ui_bg_legacy_eo.h \ lib/elementary/efl_ui_bg_legacy_eo.legacy.h \ lib/elementary/efl_ui_button_eo.legacy.h \ lib/elementary/efl_ui_button_legacy_eo.h \ lib/elementary/efl_ui_button_legacy_eo.legacy.h \ lib/elementary/efl_ui_check_eo.legacy.h \ lib/elementary/efl_ui_check_legacy_eo.h \ lib/elementary/efl_ui_check_legacy_eo.legacy.h \ lib/elementary/efl_ui_flip_eo.legacy.h \ lib/elementary/efl_ui_flip_legacy_eo.h \ lib/elementary/efl_ui_flip_legacy_eo.legacy.h \ lib/elementary/efl_ui_frame_eo.legacy.h \ lib/elementary/efl_ui_frame_legacy_eo.h \ lib/elementary/efl_ui_frame_legacy_eo.legacy.h \ lib/elementary/efl_ui_image_legacy_eo.h \ lib/elementary/efl_ui_image_legacy_eo.legacy.h \ lib/elementary/efl_ui_image_zoomable_eo.legacy.h \ lib/elementary/efl_ui_image_zoomable_legacy_eo.h \ lib/elementary/efl_ui_image_zoomable_legacy_eo.legacy.h \ lib/elementary/efl_ui_layout_legacy_eo.h \ lib/elementary/efl_ui_layout_legacy_eo.legacy.h \ lib/elementary/efl_ui_panes_eo.legacy.h \ lib/elementary/efl_ui_panes_legacy_eo.h \ lib/elementary/efl_ui_panes_legacy_eo.legacy.h \ lib/elementary/efl_ui_progressbar_legacy_eo.h \ lib/elementary/efl_ui_progressbar_legacy_eo.legacy.h \ lib/elementary/efl_ui_radio_eo.legacy.h \ lib/elementary/efl_ui_radio_legacy_eo.h \ lib/elementary/efl_ui_radio_legacy_eo.legacy.h \ lib/elementary/efl_ui_textpath_eo.legacy.h \ lib/elementary/efl_ui_textpath_legacy_eo.h \ lib/elementary/efl_ui_textpath_legacy_eo.legacy.h \ lib/elementary/efl_ui_video_eo.legacy.h \ lib/elementary/efl_ui_video_legacy_eo.h \ lib/elementary/efl_ui_video_legacy_eo.legacy.h \ lib/elementary/efl_ui_widget_eo.legacy.h \ lib/elementary/efl_ui_win_inlined_legacy_eo.h \ lib/elementary/efl_ui_win_inlined_legacy_eo.legacy.h \ lib/elementary/efl_ui_win_legacy_eo.h \ lib/elementary/efl_ui_win_legacy_eo.legacy.h \ lib/elementary/efl_ui_win_socket_legacy_eo.h \ lib/elementary/efl_ui_win_socket_legacy_eo.legacy.h \ lib/elementary/elm_access_eo.h \ lib/elementary/elm_access_eo.legacy.h \ lib/elementary/elm_actionslider_eo.h \ lib/elementary/elm_actionslider_eo.legacy.h \ lib/elementary/elm_box_eo.h \ lib/elementary/elm_box_eo.legacy.h \ lib/elementary/elm_bubble_eo.h \ lib/elementary/elm_bubble_eo.legacy.h \ lib/elementary/elm_calendar_eo.h \ lib/elementary/elm_calendar_eo.legacy.h \ lib/elementary/elm_calendar_item_eo.h \ lib/elementary/elm_calendar_item_eo.legacy.h \ lib/elementary/elm_clock_eo.h \ lib/elementary/elm_clock_eo.legacy.h \ lib/elementary/elm_code_widget_eo.legacy.h \ lib/elementary/elm_code_widget_legacy_eo.h \ lib/elementary/elm_code_widget_legacy_eo.legacy.h \ lib/elementary/elm_color_item_eo.h \ lib/elementary/elm_color_item_eo.legacy.h \ lib/elementary/elm_colorselector_eo.h \ lib/elementary/elm_colorselector_eo.legacy.h \ lib/elementary/elm_conformant_eo.h \ lib/elementary/elm_conformant_eo.legacy.h \ lib/elementary/elm_ctxpopup_eo.h \ lib/elementary/elm_ctxpopup_eo.legacy.h \ lib/elementary/elm_ctxpopup_item_eo.h \ lib/elementary/elm_ctxpopup_item_eo.legacy.h \ lib/elementary/elm_dayselector_eo.h \ lib/elementary/elm_dayselector_eo.legacy.h \ lib/elementary/elm_dayselector_item_eo.h \ lib/elementary/elm_dayselector_item_eo.legacy.h \ lib/elementary/elm_diskselector_eo.h \ lib/elementary/elm_diskselector_eo.legacy.h \ lib/elementary/elm_diskselector_item_eo.h \ lib/elementary/elm_diskselector_item_eo.legacy.h \ lib/elementary/elm_entry_eo.h \ lib/elementary/elm_entry_eo.legacy.h \ lib/elementary/elm_fileselector_button_eo.h \ lib/elementary/elm_fileselector_button_eo.legacy.h \ lib/elementary/elm_fileselector_entry_eo.h \ lib/elementary/elm_fileselector_entry_eo.legacy.h \ lib/elementary/elm_fileselector_eo.h \ lib/elementary/elm_fileselector_eo.legacy.h \ lib/elementary/elm_flipselector_eo.h \ lib/elementary/elm_flipselector_eo.legacy.h \ lib/elementary/elm_flipselector_item_eo.h \ lib/elementary/elm_flipselector_item_eo.legacy.h \ lib/elementary/elm_gengrid_eo.h \ lib/elementary/elm_gengrid_eo.legacy.h \ lib/elementary/elm_gengrid_item_eo.h \ lib/elementary/elm_gengrid_item_eo.legacy.h \ lib/elementary/elm_gengrid_pan_eo.h \ lib/elementary/elm_gengrid_pan_eo.legacy.h \ lib/elementary/elm_gengrid_pan_eo.h \ lib/elementary/elm_gengrid_pan_eo.legacy.h \ lib/elementary/elm_genlist_eo.h \ lib/elementary/elm_genlist_eo.legacy.h \ lib/elementary/elm_genlist_item_eo.h \ lib/elementary/elm_genlist_item_eo.legacy.h \ lib/elementary/elm_genlist_pan_eo.h \ lib/elementary/elm_genlist_pan_eo.legacy.h \ lib/elementary/elm_gesture_layer_eo.h \ lib/elementary/elm_gesture_layer_eo.legacy.h \ lib/elementary/elm_glview_eo.h \ lib/elementary/elm_glview_eo.legacy.h \ lib/elementary/elm_grid_eo.h \ lib/elementary/elm_grid_eo.legacy.h \ lib/elementary/elm_hover_eo.h \ lib/elementary/elm_hover_eo.legacy.h \ lib/elementary/elm_hoversel_eo.h \ lib/elementary/elm_hoversel_eo.legacy.h \ lib/elementary/elm_hoversel_item_eo.h \ lib/elementary/elm_hoversel_item_eo.legacy.h \ lib/elementary/elm_icon_eo.h \ lib/elementary/elm_icon_eo.legacy.h \ lib/elementary/elm_index_eo.h \ lib/elementary/elm_index_eo.legacy.h \ lib/elementary/elm_index_item_eo.h \ lib/elementary/elm_index_item_eo.legacy.h \ lib/elementary/elm_interface_fileselector_eo.h \ lib/elementary/elm_interface_fileselector_eo.legacy.h \ lib/elementary/elm_inwin_eo.h \ lib/elementary/elm_inwin_eo.legacy.h \ lib/elementary/elm_label_eo.h \ lib/elementary/elm_label_eo.legacy.h \ +lib/elementary/elm_list_eo.h \ +lib/elementary/elm_list_eo.legacy.h \ +lib/elementary/elm_list_item_eo.h \ +lib/elementary/elm_list_item_eo.legacy.h \ $(NULL) EXTRA_DIST2 += ${elementaryeolianfiles_DATA} $(elm_legacy_eolian_files) $(elm_private_eolian_files) $(elm_legacy_eo_files) lib_LTLIBRARIES += lib/elementary/libelementary.la includes_HEADERS = \ lib/elementary/Elementary.h \ lib/elementary/Elementary_Options.h \ lib/elementary/Elementary_Cursor.h \ $(elm_legacy_eo_headers) includesdir = $(includedir)/elementary-@VMAJ@ includesunstable_HEADERS = \ lib/elementary/elm_gen_common.h \ lib/elementary/elm_atspi_bridge.h \ lib/elementary/efl_access_object.h \ lib/elementary/efl_access_text.h \ lib/elementary/efl_access_widget_action.h \ lib/elementary/efl_access_window.h \ lib/elementary/elm_interface_fileselector.h \ lib/elementary/elm_interface_scrollable.h \ lib/elementary/elm_interfaces.h \ lib/elementary/elm_widget.h \ lib/elementary/efl_ui_widget_common.h \ lib/elementary/elm_widget_actionslider.h \ lib/elementary/elm_widget_box.h \ lib/elementary/elm_widget_bubble.h \ lib/elementary/efl_ui_button_private.h \ lib/elementary/efl_ui_bg_private.h \ lib/elementary/elm_widget_calendar.h \ lib/elementary/efl_ui_calendar_private.h \ lib/elementary/efl_ui_check_private.h \ lib/elementary/elm_widget_clock.h \ lib/elementary/elm_widget_colorselector.h \ lib/elementary/elm_widget_conform.h \ lib/elementary/elm_widget_container.h \ lib/elementary/elm_widget_combobox.h \ lib/elementary/elm_widget_ctxpopup.h \ lib/elementary/elm_widget_dayselector.h \ lib/elementary/elm_widget_diskselector.h \ lib/elementary/elm_widget_entry.h \ lib/elementary/elm_widget_fileselector.h \ lib/elementary/elm_widget_fileselector_button.h \ lib/elementary/elm_widget_fileselector_entry.h \ lib/elementary/efl_ui_widget_flip.h \ lib/elementary/elm_widget_flipselector.h \ lib/elementary/efl_ui_widget_frame.h \ lib/elementary/efl_ui_stack_private.h \ lib/elementary/elm_widget_gengrid.h \ lib/elementary/elm_widget_genlist.h \ lib/elementary/elm_widget_glview.h \ lib/elementary/elm_widget_grid.h \ lib/elementary/elm_widget_hover.h \ lib/elementary/elm_widget_hoversel.h \ lib/elementary/elm_widget_icon.h \ lib/elementary/efl_ui_widget_image.h \ lib/elementary/efl_ui_popup_private.h \ lib/elementary/efl_ui_alert_popup_private.h \ lib/elementary/efl_ui_scroll_alert_popup_private.h \ lib/elementary/efl_ui_text_alert_popup_private.h \ lib/elementary/efl_ui_anchor_popup_private.h \ lib/elementary/elm_widget_index.h \ lib/elementary/elm_widget_inwin.h \ lib/elementary/elm_widget_label.h \ lib/elementary/elm_widget_layout.h \ lib/elementary/elm_widget_list.h \ lib/elementary/elm_widget_map.h \ lib/elementary/elm_widget_mapbuf.h \ lib/elementary/elm_widget_menu.h \ lib/elementary/elm_widget_multibuttonentry.h \ lib/elementary/elm_widget_naviframe.h \ lib/elementary/efl_ui_navigation_bar_private.h \ lib/elementary/efl_ui_navigation_layout_private.h \ lib/elementary/elm_widget_notify.h \ lib/elementary/elm_widget_panel.h \ lib/elementary/efl_ui_panes_private.h \ lib/elementary/elm_widget_photo.h \ lib/elementary/efl_ui_image_zoomable_private.h \ lib/elementary/elm_widget_player.h \ lib/elementary/elm_widget_plug.h \ lib/elementary/elm_widget_popup.h \ lib/elementary/elm_widget_prefs.h \ lib/elementary/efl_ui_progressbar_private.h \ lib/elementary/efl_ui_radio_private.h \ lib/elementary/elm_widget_route.h \ lib/elementary/elm_widget_scroller.h \ lib/elementary/elm_widget_segment_control.h \ lib/elementary/elm_widget_separator.h \ lib/elementary/elm_widget_slider.h \ lib/elementary/efl_ui_slider_private.h \ lib/elementary/efl_ui_slider_interval_private.h \ lib/elementary/elm_widget_slideshow.h \ lib/elementary/elm_widget_spinner.h \ lib/elementary/efl_ui_spin_private.h \ lib/elementary/efl_ui_spin_button_private.h \ lib/elementary/efl_ui_datepicker_private.h \ lib/elementary/efl_ui_timepicker_private.h \ lib/elementary/efl_ui_tags_private.h \ lib/elementary/efl_ui_panel_private.h \ lib/elementary/elm_widget_table.h \ lib/elementary/elm_widget_thumb.h \ lib/elementary/elm_widget_toolbar.h \ lib/elementary/efl_ui_video_private.h \ lib/elementary/efl_ui_item_private.h \ lib/elementary/efl_ui_list_item_private.h \ lib/elementary/efl_ui_list_private.h \ lib/elementary/efl_ui_grid_item_private.h \ lib/elementary/efl_ui_grid_private.h \ lib/elementary/efl_ui_list_view_private.h \ lib/elementary/efl_ui_list_view_seg_array.h \ lib/elementary/elm_widget_web.h \ lib/elementary/efl_ui_clock.h \ lib/elementary/elm_code.h \ lib/elementary/elm_code_widget_legacy.h \ lib/elementary/elm_code_widget_selection.h \ lib/elementary/elm_code_diff_widget.h \ lib/elementary/elm_code_common.h \ lib/elementary/elm_code_line.h \ lib/elementary/elm_code_text.h \ lib/elementary/elm_code_indent.h \ lib/elementary/elm_code_file.h \ lib/elementary/elm_code_parse.h \ lib/elementary/elm_code_syntax.h \ lib/elementary/efl_ui_widget_scroller.h \ lib/elementary/efl_ui_widget_scroll_manager.h \ lib/elementary/efl_ui_widget_pan.h \ lib/elementary/efl_ui_nstate_private.h \ lib/elementary/Efl_Ui.h \ lib/elementary/efl_ui_widget_pager.h \ lib/elementary/efl_page_transition.h \ lib/elementary/efl_page_transition_scroll.h \ lib/elementary/efl_page_indicator.h \ lib/elementary/efl_page_indicator_icon.h \ lib/elementary/efl_ui_tab_pager_private.h \ lib/elementary/efl_ui_tab_bar_private.h \ lib/elementary/efl_ui_tab_page_private.h \ lib/elementary/efl_ui_relative_layout_private.h includesunstabledir = $(includedir)/elementary-@VMAJ@ nodist_includesunstable_HEADERS = \ $(elm_public_eolian_h) \ $(elm_legacy_eolian_legacy_h) includesub_HEADERS = \ lib/elementary/elc_ctxpopup.h \ lib/elementary/elc_ctxpopup_legacy.h \ lib/elementary/elc_combobox.h \ lib/elementary/elc_combobox_legacy.h \ lib/elementary/elc_fileselector.h \ lib/elementary/elc_fileselector_legacy.h \ lib/elementary/elc_fileselector_common.h \ lib/elementary/elc_fileselector_button.h \ lib/elementary/elc_fileselector_button_legacy.h \ lib/elementary/elc_fileselector_entry.h \ lib/elementary/elc_fileselector_entry_legacy.h \ lib/elementary/elc_hoversel.h \ lib/elementary/elc_hoversel_legacy.h \ lib/elementary/elc_multibuttonentry.h \ lib/elementary/elc_multibuttonentry_eo.h \ lib/elementary/elc_multibuttonentry_legacy.h \ lib/elementary/elc_multibuttonentry_common.h \ lib/elementary/elc_naviframe.h \ lib/elementary/elc_naviframe_legacy.h \ lib/elementary/elc_naviframe_common.h \ lib/elementary/elc_popup.h \ lib/elementary/elc_popup_legacy.h \ lib/elementary/elm_access.h \ lib/elementary/elm_actionslider.h \ lib/elementary/elm_actionslider_legacy.h \ lib/elementary/elm_app.h \ lib/elementary/elm_atspi_app_object.h \ lib/elementary/elm_authors.h \ lib/elementary/elm_bg.h \ lib/elementary/elm_bg_legacy.h \ lib/elementary/elm_box.h \ lib/elementary/elm_box_legacy.h \ lib/elementary/elm_box_common.h \ lib/elementary/elm_bubble.h \ lib/elementary/elm_bubble_legacy.h \ lib/elementary/elm_button.h \ lib/elementary/efl_ui_button_eo.h \ lib/elementary/elm_button_legacy.h \ lib/elementary/elm_cache.h \ lib/elementary/elm_calendar.h \ lib/elementary/elm_calendar_legacy.h \ lib/elementary/elm_calendar_common.h \ lib/elementary/efl_ui_calendar.h \ lib/elementary/elm_check.h \ lib/elementary/efl_ui_check_eo.h \ lib/elementary/elm_check_legacy.h \ lib/elementary/elm_clock.h \ lib/elementary/elm_clock_legacy.h \ lib/elementary/elm_cnp.h \ lib/elementary/elm_colorselector.h \ lib/elementary/elm_colorselector_legacy.h \ lib/elementary/elm_colorselector_common.h \ lib/elementary/elm_color_class.h \ lib/elementary/elm_config.h \ lib/elementary/elm_conform.h \ lib/elementary/elm_conform_legacy.h \ lib/elementary/elm_cursor.h \ lib/elementary/elm_datetime.h \ lib/elementary/elm_dayselector.h \ lib/elementary/elm_dayselector_legacy.h \ lib/elementary/elm_debug.h \ lib/elementary/elm_deprecated.h \ lib/elementary/elm_diskselector.h \ lib/elementary/elm_diskselector_common.h \ lib/elementary/elm_diskselector_legacy.h \ lib/elementary/elm_entry.h \ lib/elementary/elm_entry_common.h \ lib/elementary/elm_entry_eo.h \ lib/elementary/elm_entry_legacy.h \ lib/elementary/elm_finger.h \ lib/elementary/elm_flip.h \ lib/elementary/efl_ui_flip_eo.h \ lib/elementary/efl_ui_flip_legacy.h \ lib/elementary/elm_flipselector.h \ lib/elementary/elm_flipselector_legacy.h \ lib/elementary/elm_focus.h \ lib/elementary/elm_focus_item.h \ lib/elementary/elm_font.h \ lib/elementary/elm_frame.h \ lib/elementary/efl_ui_frame_eo.h \ lib/elementary/efl_ui_frame_legacy.h \ lib/elementary/elm_gen.h \ lib/elementary/elm_general.h \ lib/elementary/elm_gengrid.h \ lib/elementary/elm_gengrid_common.h \ lib/elementary/elm_gengrid_legacy.h \ lib/elementary/elm_genlist.h \ lib/elementary/elm_genlist_common.h \ lib/elementary/elm_genlist_legacy.h \ lib/elementary/elm_gesture_layer.h \ lib/elementary/elm_gesture_layer_common.h \ lib/elementary/elm_gesture_layer_legacy.h \ lib/elementary/elm_getting_started.h \ lib/elementary/elm_glview.h \ lib/elementary/elm_glview_common.h \ lib/elementary/elm_glview_legacy.h \ lib/elementary/elm_grid.h \ lib/elementary/elm_grid_legacy.h \ lib/elementary/elm_hover.h \ lib/elementary/elm_hover_legacy.h \ lib/elementary/elm_icon.h \ lib/elementary/elm_icon_legacy.h \ lib/elementary/elm_image.h \ lib/elementary/elm_image_eo.h \ lib/elementary/elm_image_legacy.h \ lib/elementary/elm_index.h \ lib/elementary/elm_index_legacy.h \ ${top_builddir}/elm_intro.h \ lib/elementary/elm_inwin.h \ lib/elementary/elm_inwin_legacy.h \ lib/elementary/elm_label.h \ lib/elementary/elm_label_legacy.h \ lib/elementary/elm_layout.h \ lib/elementary/elm_layout_common.h \ lib/elementary/elm_layout_legacy.h \ lib/elementary/elm_list.h \ lib/elementary/elm_list_legacy.h \ lib/elementary/elm_macros.h \ lib/elementary/elm_map.h \ lib/elementary/elm_map_common.h \ lib/elementary/elm_map_legacy.h \ lib/elementary/elm_mapbuf.h \ lib/elementary/elm_mapbuf_legacy.h \ lib/elementary/elm_menu.h \ lib/elementary/elm_menu_legacy.h \ lib/elementary/elm_mirroring.h \ lib/elementary/elm_need.h \ lib/elementary/elm_notify.h \ lib/elementary/elm_notify_common.h \ lib/elementary/elm_notify_legacy.h \ lib/elementary/efl_ui_nstate.h \ lib/elementary/elm_object.h \ lib/elementary/elm_object_item.h \ lib/elementary/elm_panel.h \ lib/elementary/elm_panel_common.h \ lib/elementary/elm_panel_legacy.h \ lib/elementary/elm_panes.h \ lib/elementary/efl_ui_panes_eo.h \ lib/elementary/elm_panes_legacy.h \ lib/elementary/elm_photo.h \ lib/elementary/elm_photo_legacy.h \ lib/elementary/elm_photocam.h \ lib/elementary/efl_ui_image_zoomable_eo.h \ lib/elementary/elm_photocam_legacy.h \ lib/elementary/elm_plug.h \ lib/elementary/elm_plug_legacy.h \ lib/elementary/elm_prefs.h \ lib/elementary/elm_prefs_common.h \ lib/elementary/elm_prefs_legacy.h \ lib/elementary/elm_prefs_data.h \ lib/elementary/elm_progressbar.h \ lib/elementary/elm_progressbar_common.h \ lib/elementary/efl_ui_progressbar_eo.h \ lib/elementary/elm_progressbar_legacy.h \ lib/elementary/elm_radio.h \ lib/elementary/efl_ui_radio_eo.h \ lib/elementary/elm_radio_legacy.h \ lib/elementary/elm_route.h \ lib/elementary/elm_route_legacy.h \ lib/elementary/elm_scale.h \ lib/elementary/elm_scroll.h \ lib/elementary/elm_scroller.h \ lib/elementary/elm_scroller_legacy.h \ lib/elementary/elm_segment_control.h \ lib/elementary/elm_segment_control_legacy.h \ lib/elementary/elm_separator.h \ lib/elementary/elm_separator_legacy.h \ lib/elementary/elm_slider.h \ lib/elementary/elm_slider_common.h \ lib/elementary/elm_slider_legacy.h \ lib/elementary/elm_slideshow.h \ lib/elementary/elm_slideshow_common.h \ lib/elementary/elm_slideshow_legacy.h \ lib/elementary/elm_spinner.h \ lib/elementary/elm_spinner_legacy.h \ lib/elementary/elm_store.h \ lib/elementary/elm_systray.h \ lib/elementary/elm_systray_common.h \ lib/elementary/elm_systray_watcher.h \ lib/elementary/elm_sys_notify.h \ lib/elementary/elm_table.h \ lib/elementary/elm_table_legacy.h \ lib/elementary/elm_textpath.h \ lib/elementary/elm_textpath_legacy.h \ lib/elementary/elm_theme.h \ lib/elementary/elm_thumb.h \ lib/elementary/elm_thumb_common.h \ lib/elementary/elm_thumb_legacy.h \ lib/elementary/elm_toolbar.h \ lib/elementary/elm_toolbar_common.h \ lib/elementary/elm_toolbar_eo.h \ lib/elementary/elm_toolbar_legacy.h \ lib/elementary/elm_tooltip.h \ lib/elementary/elm_transit.h \ lib/elementary/efl_ui_video.h \ lib/elementary/efl_ui_video_eo.h \ lib/elementary/efl_ui_video_legacy.h \ lib/elementary/elm_view_list.h \ lib/elementary/elm_view_form.h \ lib/elementary/elm_web.h \ lib/elementary/elm_web_common.h \ lib/elementary/elm_web_eo.h \ lib/elementary/elm_web_legacy.h \ lib/elementary/elm_win.h \ lib/elementary/elm_win_common.h \ lib/elementary/elm_win_eo.h \ lib/elementary/elm_win_legacy.h \ lib/elementary/elm_helper.h \ lib/elementary/elm_part_helper.h \ $(NULL) includesubdir = $(includedir)/elementary-@VMAJ@/ lib_elementary_libelementary_la_SOURCES = \ lib/elementary/elm_priv.h \ static_libs/atspi/atspi-constants.h \ lib/elementary/elementary_config.h \ lib/elementary/els_box.h \ lib/elementary/elc_ctxpopup.c \ lib/elementary/elc_fileselector.c \ lib/elementary/elc_fileselector_button.c \ lib/elementary/elc_fileselector_entry.c \ lib/elementary/elc_hoversel.c \ lib/elementary/elc_multibuttonentry.c \ lib/elementary/elc_naviframe.c \ lib/elementary/efl_ui_navigation_bar.c \ lib/elementary/efl_ui_navigation_layout.c \ lib/elementary/elc_player.c \ lib/elementary/elc_popup.c \ lib/elementary/elc_scrolled_entry.c \ lib/elementary/elm_access.c \ lib/elementary/elm_actionslider.c \ lib/elementary/elm_atspi_app_object.c \ lib/elementary/elm_atspi_bridge.c \ lib/elementary/efl_ui_legacy.c \ lib/elementary/efl_ui_bg.c \ lib/elementary/elm_box.c \ lib/elementary/elm_bubble.c \ lib/elementary/efl_ui_button.c \ lib/elementary/elm_calendar.c \ lib/elementary/efl_ui_calendar.c \ lib/elementary/efl_ui_check.c \ lib/elementary/elm_clock.c \ lib/elementary/elm_code_line.c \ lib/elementary/elm_code_text.c \ lib/elementary/elm_code_indent.c \ lib/elementary/elm_code_file.c \ lib/elementary/elm_code_parse.c \ lib/elementary/elm_code_syntax.c \ lib/elementary/elm_code_widget_selection.c \ lib/elementary/elm_code_widget.c \ lib/elementary/elm_code_diff_widget.c \ lib/elementary/elm_code.c \ lib/elementary/elm_code_private.h \ lib/elementary/elm_code_widget_private.h \ lib/elementary/elm_colorselector.c \ lib/elementary/elm_color_class.c \ lib/elementary/elc_combobox.c \ lib/elementary/elm_config.c \ lib/elementary/elm_conform.c \ lib/elementary/elm_datetime.c \ lib/elementary/elm_dayselector.c \ lib/elementary/elm_dbus_menu.c \ lib/elementary/elm_diskselector.c \ lib/elementary/elm_entry.c \ lib/elementary/efl_ui_flip.c \ lib/elementary/efl_ui_internal_text_interactive.c \ lib/elementary/efl_ui_internal_text_interactive.h \ lib/elementary/efl_ui_internal_text_scroller.c \ lib/elementary/efl_ui_internal_text_scroller.h \ lib/elementary/elm_flipselector.c \ lib/elementary/elm_font.c \ lib/elementary/efl_ui_frame.c \ lib/elementary/efl_ui_stack.c \ lib/elementary/elm_gengrid.c \ lib/elementary/elm_genlist.c \ lib/elementary/elm_gesture_layer.c \ lib/elementary/elm_gesture_layer_extra_gestures.c \ lib/elementary/elm_glview.c \ lib/elementary/elm_grid.c \ lib/elementary/elm_hover.c \ lib/elementary/elm_icon.c \ lib/elementary/efl_ui_image.c \ lib/elementary/elm_index.c \ lib/elementary/efl_access_object.c \ lib/elementary/efl_access_action.c \ lib/elementary/efl_access_component.c \ lib/elementary/efl_access_editable_text.c \ lib/elementary/efl_access_selection.c \ lib/elementary/efl_access_text.c \ lib/elementary/efl_access_value.c \ lib/elementary/efl_access_widget_action.c \ lib/elementary/efl_access_window.c \ lib/elementary/elm_interface_fileselector.c \ lib/elementary/elm_interface_scrollable.c \ lib/elementary/elm_inwin.c \ lib/elementary/elm_label.c \ lib/elementary/efl_ui_layout.c \ lib/elementary/efl_ui_layout_pack.c \ lib/elementary/elm_list.c \ lib/elementary/elm_main.c \ lib/elementary/elm_map.c \ lib/elementary/elm_mapbuf.c \ lib/elementary/elm_menu.c \ lib/elementary/elm_module.c \ lib/elementary/elm_notify.c \ lib/elementary/efl_ui_nstate.c \ lib/elementary/elm_panel.c \ lib/elementary/efl_ui_panes.c \ lib/elementary/elm_photo.c \ lib/elementary/efl_ui_image_zoomable.c \ lib/elementary/elm_plug.c \ lib/elementary/elm_prefs.c \ lib/elementary/elm_prefs_data.c \ lib/elementary/elm_prefs_edd.x \ lib/elementary/efl_ui_progressbar.c \ lib/elementary/efl_ui_radio.c \ lib/elementary/elm_route.c \ lib/elementary/elm_scroller.c \ lib/elementary/elm_segment_control.c \ lib/elementary/elm_separator.c \ lib/elementary/elm_slider.c \ lib/elementary/efl_ui_slider.c \ lib/elementary/efl_ui_slider_interval.c \ lib/elementary/efl_ui_spin.c \ lib/elementary/efl_ui_spin_button.c \ lib/elementary/efl_ui_datepicker.c \ lib/elementary/efl_ui_timepicker.c \ lib/elementary/efl_ui_tags.c \ lib/elementary/efl_ui_panel.c \ lib/elementary/elm_slideshow.c \ lib/elementary/elm_spinner.c \ lib/elementary/elm_store.c \ lib/elementary/elm_systray.c \ lib/elementary/elm_systray_watcher.c \ lib/elementary/elm_sys_notify_interface.c \ lib/elementary/elm_sys_notify.c \ lib/elementary/elm_sys_notify_dbus.c \ lib/elementary/elm_table.c \ lib/elementary/elm_theme.c \ lib/elementary/elm_thumb.c \ lib/elementary/elm_toolbar.c \ lib/elementary/elm_transit.c \ lib/elementary/elm_util.c \ lib/elementary/efl_ui_video.c \ lib/elementary/elm_view_list.c \ lib/elementary/elm_view_form.c \ lib/elementary/elm_web2.c \ lib/elementary/efl_ui_widget.c \ lib/elementary/efl_ui_widget_common.c \ lib/elementary/efl_ui_win.c \ lib/elementary/efl_ui_win_inlined.c \ lib/elementary/efl_ui_win_socket.c \ lib/elementary/elm_helper.c \ lib/elementary/els_box.c \ lib/elementary/els_cursor.c \ lib/elementary/els_tooltip.c \ lib/elementary/elu_ews_wm.c \ lib/elementary/efl_ui_container_layout.c \ lib/elementary/efl_ui_container_layout.h \ lib/elementary/efl_ui_box.c \ lib/elementary/efl_ui_box_flow.c \ lib/elementary/efl_ui_box_stack.c \ lib/elementary/efl_ui_box_layout.c \ lib/elementary/efl_ui_box_private.h \ lib/elementary/efl_ui_popup.c \ lib/elementary/efl_ui_alert_popup.c \ lib/elementary/efl_ui_scroll_alert_popup.c \ lib/elementary/efl_ui_text_alert_popup.c \ lib/elementary/efl_ui_anchor_popup.c \ lib/elementary/efl_ui_table.c \ lib/elementary/efl_ui_table_static.c \ lib/elementary/efl_ui_table_layout.c \ lib/elementary/efl_ui_table_private.h \ lib/elementary/efl_ui_text.c \ lib/elementary/efl_ui_text_factory_images.c \ lib/elementary/efl_ui_text_factory_emoticons.c \ lib/elementary/efl_ui_text_factory_fallback.c \ lib/elementary/efl_ui_clock.c \ lib/elementary/efl_ui_clock_private.h \ lib/elementary/efl_ui_image_factory.c \ lib/elementary/efl_ui_focus_manager.c \ lib/elementary/efl_ui_focus_manager_calc.c \ lib/elementary/efl_ui_focus_manager_sub.c \ lib/elementary/efl_ui_focus_object.c \ lib/elementary/efl_ui_focus_manager_root_focus.c \ lib/elementary/efl_ui_textpath.c \ lib/elementary/efl_ui_focus_layer.c \ lib/elementary/efl_ui_focus_composition.c \ lib/elementary/efl_ui_focus_parent_provider.c \ lib/elementary/efl_ui_focus_parent_provider_standard.c \ lib/elementary/efl_ui_focus_parent_provider_gen.c \ lib/elementary/efl_ui_focus_util.c \ lib/elementary/elm_widget_item_static_focus.c \ lib/elementary/efl_ui_item.c \ lib/elementary/efl_ui_list_item.c \ lib/elementary/efl_ui_list_default_item.c \ lib/elementary/efl_ui_list_empty_item.c \ lib/elementary/efl_ui_list.c \ lib/elementary/efl_ui_grid_item.c \ lib/elementary/efl_ui_grid_default_item.c \ lib/elementary/efl_ui_grid.c \ lib/elementary/efl_ui_list_view.c \ lib/elementary/efl_ui_list_view_precise_layouter.c \ lib/elementary/efl_ui_list_view_seg_array.c \ lib/elementary/efl_ui_layout_factory.c \ lib/elementary/efl_ui_scroller.c \ lib/elementary/efl_ui_scroll_manager.c \ lib/elementary/efl_ui_pan.c \ lib/elementary/efl_ui_selection_manager.c \ lib/elementary/efl_ui_selection_manager_private.h \ lib/elementary/efl_ui_selection.c \ lib/elementary/efl_datetime_manager.c \ lib/elementary/efl_ui_dnd.c \ lib/elementary/elm_focus_legacy.c \ static_libs/buildsystem/buildsystem.h \ static_libs/buildsystem/buildsystem_autotools.c \ lib/elementary/efl_ui_pager.c \ lib/elementary/efl_page_transition.c \ lib/elementary/efl_page_transition_scroll.c \ lib/elementary/efl_page_indicator.c \ lib/elementary/efl_page_indicator_icon.c \ lib/elementary/efl_ui_focus_graph.h \ lib/elementary/efl_ui_focus_graph.c \ lib/elementary/efl_ui_tab_pager.c \ lib/elementary/efl_ui_tab_bar.c \ lib/elementary/efl_ui_tab_page.c \ lib/elementary/efl_ui_widget_focus_manager.c \ lib/elementary/efl_ui_caching_factory.c \ lib/elementary/efl_ui_widget_factory.c \ lib/elementary/efl_ui_size_model.c \ lib/elementary/efl_ui_homogeneous_model.c \ lib/elementary/efl_ui_exact_model.c \ lib/elementary/efl_ui_average_model.c \ lib/elementary/efl_ui_relative_layout.c \ $(NULL) lib_elementary_libelementary_la_CFLAGS = @ELEMENTARY_CFLAGS@ lib_elementary_libelementary_la_LIBADD = \ @ELEMENTARY_LIBS@ \ @LTLIBINTL@ lib_elementary_libelementary_la_DEPENDENCIES = @ELEMENTARY_INTERNAL_LIBS@ lib_elementary_libelementary_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ lib_elementary_libelementary_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -DMODULES_PATH=\"$(pkglibdir)/modules\" \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/static_libs/ \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_srcdir)/src/modules/ecore_evas/engines/wayland \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(datadir)/elementary\" \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)\" \ -DPACKAGE_SRC_DIR=\"$(abs_top_srcdir)\" \ -DLOCALE_DIR=\"$(localedir)\" \ -DICON_DIR=\"$(datadir)/icons\" \ -DELM_TOP_BUILD_DIR=\"$(top_builddir)\" \ -DELEMENTARY_BUILD \ @ELEMENTARY_CFLAGS@ if HAVE_WINDOWS lib_elementary_libelementary_la_CPPFLAGS += \ -I$(top_srcdir)/src/lib/evil \ -I$(top_srcdir)/src/lib/evil/regex \ -DPOSIX_MISTAKE endif EXTRA_DIST2 += \ lib/elementary/elm_factory.h \ lib/elementary/elm_factory.c \ lib/elementary/elm_module_helper.h \ $(top_srcdir)/elm_intro.h.in ### Binary bin_PROGRAMS += \ bin/elementary/elementary_test \ bin/elementary/elementary_config \ bin/elementary/elementary_codegen \ bin/elementary/elm_prefs_cc if BUILD_QUICKLAUNCH bin_PROGRAMS += \ bin/elementary/elementary_quicklaunch if BUILD_RUN bin_PROGRAMS += \ bin/elementary/elementary_run endif endif bin_elementary_elementary_test_SOURCES = \ bin/elementary/test.c \ bin/elementary/test_explode.c \ bin/elementary/test_explode.h \ bin/elementary/test_3d.c \ bin/elementary/test_access.c \ bin/elementary/test_actionslider.c \ bin/elementary/test_anim.c \ bin/elementary/test_bg.c \ bin/elementary/test_box.c \ bin/elementary/test_bubble.c \ bin/elementary/test_button.c \ bin/elementary/test_ui_button.c \ bin/elementary/test_calendar.c \ bin/elementary/test_check.c \ bin/elementary/test_clock.c \ bin/elementary/test_cnp.c \ bin/elementary/test_code.c \ bin/elementary/test_colorselector.c \ bin/elementary/test_colorclass.c \ bin/elementary/test_combobox.c \ bin/elementary/test_config.c \ bin/elementary/test_conform.c \ bin/elementary/test_conform_indicator.c \ bin/elementary/test_ctxpopup.c \ bin/elementary/test_cursor.c \ bin/elementary/test_datetime.c \ bin/elementary/test_dayselector.c \ bin/elementary/test_disable.c \ bin/elementary/test_diskselector.c \ bin/elementary/test_dnd.c \ bin/elementary/test_efl_anim_alpha.c \ bin/elementary/test_efl_anim_rotate.c \ bin/elementary/test_efl_anim_scale.c \ bin/elementary/test_efl_anim_translate.c \ bin/elementary/test_efl_anim_group_parallel.c \ bin/elementary/test_efl_anim_group_sequential.c \ bin/elementary/test_efl_anim_pause.c \ bin/elementary/test_efl_anim_repeat.c \ bin/elementary/test_efl_anim_start_delay.c \ bin/elementary/test_efl_anim_interpolator.c \ bin/elementary/test_eio.c \ bin/elementary/test_entry.c \ bin/elementary/test_entry_anchor.c \ bin/elementary/test_entry_anchor2.c \ bin/elementary/test_events.c \ bin/elementary/test_evas_mask.c \ bin/elementary/test_evas_map.c \ bin/elementary/test_efl_gfx_mapping.c \ bin/elementary/test_evas_snapshot.c \ bin/elementary/test_external.c \ bin/elementary/test_fileselector_button.c \ bin/elementary/test_fileselector.c \ bin/elementary/test_fileselector_entry.c \ bin/elementary/test_flip.c \ bin/elementary/test_flip_page.c \ bin/elementary/test_flip_page_eo.c \ bin/elementary/test_flipselector.c \ bin/elementary/test_floating.c \ bin/elementary/test_focus.c \ bin/elementary/test_focus_custom_chain.c \ bin/elementary/test_focus_policy.c \ bin/elementary/test_focus_style.c \ bin/elementary/test_gengrid.c \ bin/elementary/test_genlist.c \ bin/elementary/test_gesture_layer.c \ bin/elementary/test_gesture_layer2.c \ bin/elementary/test_gesture_layer3.c \ bin/elementary/test_gfx_filters.c \ bin/elementary/test_glview_simple.c \ bin/elementary/test_glview.c \ bin/elementary/test_glview_manygears.c \ bin/elementary/test_grid.c \ bin/elementary/test_ui_table_static.c \ bin/elementary/test_ui_stack.c \ bin/elementary/test_hover.c \ bin/elementary/test_hoversel.c \ bin/elementary/test_icon.c \ bin/elementary/test_icon_desktops.c \ bin/elementary/test_icon_animated.c \ bin/elementary/test_image.c \ bin/elementary/test_index.c \ bin/elementary/test_inwin.c \ bin/elementary/test_label.c \ bin/elementary/test_launcher.c \ bin/elementary/test_layout.c \ bin/elementary/test_list.c \ bin/elementary/test_map.c \ bin/elementary/test_main_menu.c \ bin/elementary/test_menu.c \ bin/elementary/test_multi.c \ bin/elementary/test_multibuttonentry.c \ bin/elementary/test_naviframe.c \ bin/elementary/test_naviframe_complex.c \ bin/elementary/test_notify.c \ bin/elementary/test_nstate.c \ bin/elementary/test_panel.c \ bin/elementary/test_panes.c \ bin/elementary/test_ui_panes.c \ bin/elementary/test_part_bg.c \ bin/elementary/test_part_shadow.c \ bin/elementary/test_photo.c \ bin/elementary/test_photocam.c \ bin/elementary/test_popup.c \ bin/elementary/test_prefs.c \ bin/elementary/test_progressbar.c \ bin/elementary/test_ui_progressbar.c \ bin/elementary/test_radio.c \ bin/elementary/test_scaling.c \ bin/elementary/test_scroller.c \ bin/elementary/test_ui_scroller.c \ bin/elementary/test_segment_control.c \ bin/elementary/test_separator.c \ bin/elementary/test_slider.c \ bin/elementary/test_ui_slider.c \ bin/elementary/test_ui_slider_interval.c \ bin/elementary/test_ui_spin.c \ bin/elementary/test_ui_spin_button.c \ bin/elementary/test_ui_datepicker.c \ bin/elementary/test_ui_timepicker.c \ bin/elementary/test_ui_tags.c \ bin/elementary/test_ui_panel.c \ bin/elementary/test_slideshow.c \ bin/elementary/test_spinner.c \ bin/elementary/test_store.c \ bin/elementary/test_sys_notify.c \ bin/elementary/test_systray.c \ bin/elementary/test_table.c \ bin/elementary/test_thumb.c \ bin/elementary/test_toolbar.c \ bin/elementary/test_tooltip.c \ bin/elementary/test_transit.c \ bin/elementary/test_transit_bezier.c \ bin/elementary/test_ui_box.c \ bin/elementary/test_ui_clock.c \ bin/elementary/test_ui_table.c \ bin/elementary/test_ui_popup.c \ bin/elementary/test_ui_textpath.c \ bin/elementary/test_video.c \ bin/elementary/test_weather.c \ bin/elementary/test_web.c \ bin/elementary/test_win_inline.c \ bin/elementary/test_win_keygrab.c \ bin/elementary/test_win_socket.c \ bin/elementary/test_win_plug.c \ bin/elementary/test_win_state.c \ bin/elementary/test_win_wm_rotation.c \ bin/elementary/test_win_dialog.c \ bin/elementary/test_win_modal.c \ bin/elementary/test_efl_ui_text.c \ bin/elementary/test_win_stack.c \ bin/elementary/test_win_indicator.c \ bin/elementary/test_gesture_framework.c \ bin/elementary/test_ui_tab_pager.c \ bin/elementary/test_ui_pager.c \ bin/elementary/test_ui_pager_scroll.c \ bin/elementary/test_ui_relative_layout.c \ bin/elementary/test.h bin_elementary_elementary_test_LDADD = @USE_ELEMENTARY_LIBS@ bin_elementary_elementary_test_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ bin_elementary_elementary_test_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_srcdir)/src/bin/elementary \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(datadir)/elementary\" \ @ELEMENTARY_CFLAGS@ bin_elementary_elementary_config_SOURCES = bin/elementary/config.c bin_elementary_elementary_config_LDADD = @USE_ELEMENTARY_LIBS@ bin_elementary_elementary_config_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ bin_elementary_elementary_config_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_srcdir)/src/bin/elementary \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(datadir)/elementary\" \ @ELEMENTARY_CFLAGS@ bin_elementary_elementary_codegen_SOURCES = bin/elementary/elementary_codegen.c bin_elementary_elementary_codegen_LDADD = @USE_ELEMENTARY_LIBS@ bin_elementary_elementary_codegen_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ bin_elementary_elementary_codegen_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_srcdir)/src/bin/elementary \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ @ELEMENTARY_CFLAGS@ noinst_HEADERS += \ bin/elementary/elm_prefs_cc.h bin_elementary_elm_prefs_cc_SOURCES = \ bin/elementary/elm_prefs_cc.c \ bin/elementary/elm_prefs_cc_mem.c \ bin/elementary/elm_prefs_cc_out.c \ bin/elementary/elm_prefs_cc_parse.c \ bin/elementary/elm_prefs_cc_handlers.c bin_elementary_elm_prefs_cc_LDADD = @USE_ELEMENTARY_LIBS@ bin_elementary_elm_prefs_cc_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ bin_elementary_elm_prefs_cc_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_srcdir)/src/bin/elementary \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ @ELEMENTARY_CFLAGS@ if HAVE_WINDOWS bin_elementary_elm_prefs_cc_CPPFLAGS += \ -I$(top_srcdir)/src/lib/evil \ -I$(top_srcdir)/src/lib/evil/regex \ -DPOSIX_MISTAKE endif if BUILD_QUICKLAUNCH bin_elementary_elementary_quicklaunch_SOURCES = bin/elementary/quicklaunch.c bin_elementary_elementary_quicklaunch_LDADD = @USE_ELEMENTARY_LIBS@ @requirements_libs_elm@ bin_elementary_elementary_quicklaunch_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ bin_elementary_elementary_quicklaunch_CPPFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_srcdir)/src/bin/elementary \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ @ELEMENTARY_CFLAGS@ if BUILD_RUN bin_elementary_elementary_run_CPPFLAGS = -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary/ \ -I$(top_builddir)/src/lib/elementary/ \ -I$(top_srcdir)/src/bin/elementary/ \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" bin_elementary_elementary_run_SOURCES = bin/elementary/run.c bin_elementary_elementary_run_LDADD = @requirements_libs_elm@ bin_elementary_elementary_run_LDFLAGS = endif endif EXTRA_DIST2 += \ bin/elementary/test_factory.c ### Modules ## access_output moduleaccess_outputpkgdir = $(libdir)/elementary/modules/access_output/$(MODULE_ARCH) moduleaccess_outputpkg_LTLIBRARIES = modules/elementary/access_output/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduleaccess_outputpkgLTLIBRARIES = install-moduleaccess_outputpkgLTLIBRARIES $(install_moduleaccess_outputpkgLTLIBRARIES): install-libLTLIBRARIES modules_elementary_access_output_module_la_SOURCES = modules/elementary/access_output/mod.c modules_elementary_access_output_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ modules_elementary_access_output_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_access_output_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_access_output_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_access_output_module_la_LIBTOOLFLAGS = --tag=disable-static ## clock_input_ctxpopup moduleclock_input_ctxpopuppkgdir = $(libdir)/elementary/modules/clock_input_ctxpopup/$(MODULE_ARCH) moduleclock_input_ctxpopuppkg_LTLIBRARIES = modules/elementary/clock_input_ctxpopup/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduleclock_input_ctxpopuppkgLTLIBRARIES = install-moduleclock_input_ctxpopuppkgLTLIBRARIES $(install_moduleclock_input_ctxpopuppkgLTLIBRARIES): install-libLTLIBRARIES modules_elementary_clock_input_ctxpopup_module_la_SOURCES = \ modules/elementary/clock_input_ctxpopup/clock_input_ctxpopup.c modules_elementary_clock_input_ctxpopup_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ modules_elementary_clock_input_ctxpopup_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_clock_input_ctxpopup_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_clock_input_ctxpopup_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_clock_input_ctxpopup_module_la_LIBTOOLFLAGS = --tag=disable-static ## prefs moduleprefspkgdir = $(libdir)/elementary/modules/prefs/$(MODULE_ARCH) moduleprefspkg_LTLIBRARIES = modules/elementary/prefs/module.la EXTRA_DIST2 += modules/elementary/prefs/elm_prefs_swallow.edc prefs_filesdir = $(libdir)/elementary/modules/prefs/$(MODULE_ARCH) prefs_files_DATA = modules/elementary/prefs/elm_prefs_swallow.edj CLEANFILES += $(prefs_files_DATA) modules/elementary/prefs/elm_prefs_swallow.edj: modules/elementary/prefs/elm_prefs_swallow.edc bin/edje/edje_cc${EXEEXT} $(AM_V_EDJ) \ $(MKDIR_P) modules/elementary/prefs/ ; \ $(EDJE_CC) $(EDJE_CC_FLAGS) -id $(top_srcdir)/src/modules/elementary/prefs/ $< $@ # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduleprefspkgLTLIBRARIES = install-moduleprefspkgLTLIBRARIES $(install_moduleprefspkgLTLIBRARIES): install-libLTLIBRARIES modules_elementary_prefs_module_la_SOURCES = \ modules/elementary/prefs/private.h \ modules/elementary/prefs/item_widgets.inc \ modules/elementary/prefs/page_widgets.inc \ modules/elementary/prefs/prefs_iface.c \ modules/elementary/prefs/elm_button.c \ modules/elementary/prefs/elm_check.c \ modules/elementary/prefs/elm_datetime.c \ modules/elementary/prefs/elm_entry.c \ modules/elementary/prefs/elm_label.c \ modules/elementary/prefs/elm_separator.c \ modules/elementary/prefs/elm_slider.c \ modules/elementary/prefs/elm_spinner.c \ modules/elementary/prefs/elm_swallow.c \ modules/elementary/prefs/elm_vertical_box.c \ modules/elementary/prefs/elm_horizontal_box.c \ modules/elementary/prefs/elm_vertical_frame.c \ modules/elementary/prefs/elm_horizontal_frame.c modules_elementary_prefs_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ if HAVE_WINDOWS modules_elementary_prefs_module_la_CPPFLAGS += \ -I$(top_srcdir)/src/lib/evil \ -I$(top_srcdir)/src/lib/evil/regex \ -DPOSIX_MISTAKE endif modules_elementary_prefs_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_prefs_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_prefs_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_prefs_module_la_LIBTOOLFLAGS = --tag=disable-static ## test_entry moduletest_entrypkgdir = $(libdir)/elementary/modules/test_entry/$(MODULE_ARCH) moduletest_entrypkg_LTLIBRARIES = modules/elementary/test_entry/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduletest_entrypkgLTLIBRARIES = install-moduletest_entrypkgLTLIBRARIES $(install_moduletest_entrypkgLTLIBRARIES): install-libLTLIBRARIES modules_elementary_test_entry_module_la_SOURCES = modules/elementary/test_entry/mod.c modules_elementary_test_entry_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ modules_elementary_test_entry_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_test_entry_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_test_entry_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_test_entry_module_la_LIBTOOLFLAGS = --tag=disable-static ## test_map moduletest_mappkgdir = $(libdir)/elementary/modules/test_map/$(MODULE_ARCH) moduletest_mappkg_LTLIBRARIES = modules/elementary/test_map/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduletest_mappkgLTLIBRARIES = install-moduletest_mappkgLTLIBRARIES $(install_moduletest_mappkgLTLIBRARIES): install-libLTLIBRARIES modules_elementary_test_map_module_la_SOURCES = modules/elementary/test_map/mod.c modules_elementary_test_map_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ modules_elementary_test_map_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_test_map_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_test_map_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_test_map_module_la_LIBTOOLFLAGS = --tag=disable-static ## web_none moduleweb_nonepkgdir = $(libdir)/elementary/modules/web/none/$(MODULE_ARCH) moduleweb_nonepkg_LTLIBRARIES = modules/elementary/web/none/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduleweb_nonepkgLTLIBRARIES = install-moduleweb_nonepkgLTLIBRARIES $(install_moduleweb_nonepkgLTLIBRARIES): install-libLTLIBRARIES elm_web_none_eolian_files = modules/elementary/web/none/elm_web_none.eo elm_web_none_eolian_c = $(elm_web_none_eolian_files:%.eo=%.eo.c) elm_web_none_eolian_h = $(elm_web_none_eolian_files:%.eo=%.eo.h) EXTRA_DIST2 += $(elm_web_none_eolian_files) BUILT_SOURCES += $(elm_web_none_eolian_c) $(elm_web_none_eolian_h) modules_elementary_web_none_module_la_SOURCES = \ modules/elementary/web/none/elm_web_none.c modules_elementary_web_none_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -DMODULES_PATH=\"$(libdir)/elementary/modules\" \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_builddir)/src/modules/elementary/web/none \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ modules_elementary_web_none_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ modules_elementary_web_none_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ modules_elementary_web_none_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ modules_elementary_web_none_module_la_LIBTOOLFLAGS = --tag=disable-static ## edje_external moduleedje_externalpkgdir = $(libdir)/edje/modules/elm/$(MODULE_ARCH) moduleedje_externalpkg_LTLIBRARIES = edje_external/elementary/module.la # Workaround for broken parallel install support in automake (relink issue) # http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 install_moduleedje_externalpkgLTLIBRARIES = install-moduleedje_externalpkgLTLIBRARIES $(install_moduleedje_externalpkgLTLIBRARIES): install-libLTLIBRARIES edje_external_elementary_module_la_SOURCES = \ edje_external/elementary/private.h \ edje_external/elementary/modules.inc \ edje_external/elementary/elm.c \ edje_external/elementary/elm_actionslider.c \ edje_external/elementary/elm_bg.c \ edje_external/elementary/elm_bubble.c \ edje_external/elementary/elm_button.c \ edje_external/elementary/elm_calendar.c \ edje_external/elementary/elm_check.c \ edje_external/elementary/elm_clock.c \ edje_external/elementary/elm_combobox.c \ edje_external/elementary/elm_entry.c \ edje_external/elementary/elm_fileselector.c \ edje_external/elementary/elm_fileselector_button.c \ edje_external/elementary/elm_fileselector_entry.c \ edje_external/elementary/elm_frame.c \ edje_external/elementary/elm_gengrid.c \ edje_external/elementary/elm_genlist.c \ edje_external/elementary/elm_hoversel.c \ edje_external/elementary/elm_icon.c \ edje_external/elementary/elm_index.c \ edje_external/elementary/elm_label.c \ edje_external/elementary/elm_list.c \ edje_external/elementary/elm_map.c \ edje_external/elementary/elm_multibuttonentry.c \ edje_external/elementary/elm_naviframe.c \ edje_external/elementary/elm_notify.c \ edje_external/elementary/elm_panes.c \ edje_external/elementary/elm_photocam.c \ edje_external/elementary/elm_progressbar.c \ edje_external/elementary/elm_radio.c \ edje_external/elementary/elm_scroller.c \ edje_external/elementary/elm_segment_control.c \ edje_external/elementary/elm_slider.c \ edje_external/elementary/elm_slideshow.c \ edje_external/elementary/elm_spinner.c \ edje_external/elementary/elm_thumb.c \ edje_external/elementary/elm_toolbar.c \ edje_external/elementary/elm_video.c \ edje_external/elementary/elm_web.c edje_external_elementary_module_la_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -DMODULES_PATH=\"$(libdir)/elementary/modules\" \ -I. \ -I$(top_builddir) \ -I$(top_srcdir) \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_builddir)/src/edje_externals \ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_CFLAGS@ edje_external_elementary_module_la_LIBADD = @USE_ELEMENTARY_LIBS@ edje_external_elementary_module_la_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ edje_external_elementary_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@ edje_external_elementary_module_la_LIBTOOLFLAGS = --tag=disable-static testfilesdir = $(datadir)/elementary/ testfiles_DATA = \ tests/elementary/testfile.txt \ tests/elementary/testfile-windows.txt \ tests/elementary/testfile-withblanks.txt \ tests/elementary/testdiff.diff ### Tests EXTRA_DIST2 += $(testfiles_DATA) if EFL_ENABLE_TESTS AM_TESTS_ENVIRONMENT += \ ELM_DATA_DIR=${top_builddir}/data/elementary \ ELM_RUN_IN_TREE=1 \ EFL_RUN_IN_TREE=1 check_PROGRAMS += tests/elementary/elm_suite tests/elementary/efl_ui_suite TESTS += tests/elementary/elm_suite tests/elementary/efl_ui_suite tests_elementary_elm_suite_SOURCES = \ tests/elementary/suite_helpers.c \ tests/elementary/elm_suite.c \ tests/elementary/elm_test_atspi.c \ tests/elementary/elm_test_check.c \ tests/elementary/elm_test_colorselector.c \ tests/elementary/elm_test_entry.c \ tests/elementary/elm_test_init.c \ tests/elementary/elm_test_list.c \ tests/elementary/elm_test_button.c \ tests/elementary/elm_test_image.c \ tests/elementary/elm_test_photo.c \ tests/elementary/elm_test_actionslider.c \ tests/elementary/elm_test_box.c \ tests/elementary/elm_test_table.c \ tests/elementary/elm_test_thumb.c \ tests/elementary/elm_test_menu.c \ tests/elementary/elm_test_photocam.c \ tests/elementary/elm_test_win.c \ tests/elementary/elm_test_icon.c \ tests/elementary/elm_test_prefs.c \ tests/elementary/elm_test_map.c \ tests/elementary/elm_test_glview.c \ tests/elementary/elm_test_web.c \ tests/elementary/elm_test_toolbar.c \ tests/elementary/elm_test_grid.c \ tests/elementary/elm_test_diskselector.c \ tests/elementary/elm_test_notify.c \ tests/elementary/elm_test_mapbuf.c \ tests/elementary/elm_test_flip.c \ tests/elementary/elm_test_layout.c \ tests/elementary/elm_test_slider.c \ tests/elementary/elm_test_ctxpopup.c \ tests/elementary/elm_test_separator.c \ tests/elementary/elm_test_calendar.c \ tests/elementary/elm_test_inwin.c \ tests/elementary/elm_test_gengrid.c \ tests/elementary/elm_test_radio.c \ tests/elementary/elm_test_scroller.c \ tests/elementary/elm_test_frame.c \ tests/elementary/elm_test_datetime.c \ tests/elementary/elm_test_player.c \ tests/elementary/elm_test_bg.c \ tests/elementary/elm_test_video.c \ tests/elementary/elm_test_segmentcontrol.c \ tests/elementary/elm_test_progressbar.c \ tests/elementary/elm_test_fileselector.c \ tests/elementary/elm_test_fileselector_button.c \ tests/elementary/elm_test_fileselector_entry.c \ tests/elementary/elm_test_hoversel.c \ tests/elementary/elm_test_multibuttonentry.c \ tests/elementary/elm_test_naviframe.c \ tests/elementary/elm_test_popup.c \ tests/elementary/elm_test_bubble.c \ tests/elementary/elm_test_clock.c \ tests/elementary/elm_test_conformant.c \ tests/elementary/elm_test_dayselector.c \ tests/elementary/elm_test_flipselector.c \ tests/elementary/elm_test_genlist.c \ tests/elementary/elm_test_hover.c \ tests/elementary/elm_test_index.c \ tests/elementary/elm_test_label.c \ tests/elementary/elm_test_panel.c \ tests/elementary/elm_test_panes.c \ tests/elementary/elm_test_slideshow.c \ tests/elementary/elm_test_spinner.c \ tests/elementary/elm_test_plug.c \ tests/elementary/elm_test_config.c \ tests/elementary/elm_code_file_test_load.c \ tests/elementary/elm_code_file_test_memory.c \ tests/elementary/elm_code_test_basic.c \ tests/elementary/elm_code_test_line.c \ tests/elementary/elm_code_test_parse.c \ tests/elementary/elm_code_test_syntax.c \ tests/elementary/elm_code_test_text.c \ tests/elementary/elm_code_test_indent.c \ tests/elementary/elm_code_test_widget.c \ tests/elementary/elm_code_test_widget_text.c \ tests/elementary/elm_code_test_widget_selection.c \ tests/elementary/elm_code_test_widget_undo.c \ tests/elementary/elm_test_widget_focus.c tests_elementary_elm_suite_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)\" \ -DTESTS_BUILD_DIR=\"${top_builddir}/src/tests/elementary\" \ -DTESTS_SRC_DIR=\"${top_srcdir}/src/tests/elementary\" \ -DELM_IMAGE_DATA_DIR=\"${top_srcdir}/data/elementary\" \ -DELM_TEST_DATA_DIR=\"${abs_top_builddir}/data/elementary\" \ -DPACKAGE_DATA_DIR=\"${abs_top_builddir}/data/elementary\" \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_builddir)/src/tests/elementary \ @CHECK_CFLAGS@ \ @ELEMENTARY_CFLAGS@ tests_elementary_elm_suite_LDADD = @CHECK_LIBS@ @USE_ELEMENTARY_LIBS@ tests_elementary_elm_suite_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ tests_elementary_efl_ui_suite_SOURCES = \ tests/elementary/suite_helpers.c \ tests/elementary/suite_helpers.h \ tests/elementary/efl_ui_suite.c \ tests/elementary/elm_test_init.c \ tests/elementary/efl_ui_test_atspi.c \ tests/elementary/efl_ui_test_focus_common.c \ tests/elementary/efl_ui_test_focus_common.h \ tests/elementary/efl_ui_test_focus.c \ tests/elementary/efl_ui_test_focus_sub.c \ tests/elementary/efl_ui_test_box.c \ tests/elementary/efl_ui_test_table.c \ tests/elementary/efl_ui_test_relative_layout.c \ tests/elementary/efl_ui_test_grid.c \ tests/elementary/efl_ui_test_image.c \ tests/elementary/efl_ui_test_image_zoomable.c \ tests/elementary/efl_ui_test_layout.c \ tests/elementary/efl_ui_test_widget.c \ tests/elementary/efl_ui_suite.h \ tests/elementary/efl_ui_model.c tests_elementary_efl_ui_suite_CPPFLAGS = \ -DELM_INTERNAL_API_ARGESFSDFEFC=1 \ -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)\" \ -DTESTS_BUILD_DIR=\"${top_builddir}/src/tests/elementary\" \ -DTESTS_SRC_DIR=\"${top_srcdir}/src/tests/elementary\" \ -DELM_IMAGE_DATA_DIR=\"${top_srcdir}/data/elementary\" \ -DELM_TEST_DATA_DIR=\"${abs_top_builddir}/data/elementary\" \ -DPACKAGE_DATA_DIR=\"${abs_top_builddir}/data/elementary\" \ -I$(top_srcdir)/src/lib/elementary \ -I$(top_builddir)/src/lib/elementary \ -I$(top_builddir)/src/tests/elementary \ @CHECK_CFLAGS@ \ @ELEMENTARY_CFLAGS@ tests_elementary_efl_ui_suite_LDADD = @CHECK_LIBS@ @USE_ELEMENTARY_LIBS@ tests_elementary_efl_ui_suite_DEPENDENCIES = @USE_ELEMENTARY_INTERNAL_LIBS@ endif if HAVE_LUA_BINDINGS elementary_eolian_lua = $(elm_public_eolian_files:%.eo=%.eo.lua) generated_elementary_lua_all = $(elementary_eolian_lua) GENERATED_LUA_BINDINGS += $(generated_elementary_lua_all) installed_elementaryluadir = $(datadir)/elua/modules/elementary nodist_installed_elementarylua_DATA = $(generated_elementary_lua_all) endif if HAVE_JS generated_elementary_js_bindings = $(elm_public_eolian_files:%.eo=%.eo.js.cc) GENERATED_JS_BINDINGS += $(generated_elementary_js_bindings) endif if HAVE_CXX elementary_eolian_cxx_hh = $(elm_public_eolian_files:%.eo=%.eo.hh) elementary_eolian_cxx_impl_hh = $(elm_public_eolian_files:%.eo=%.eo.impl.hh) endif EXTRA_DIST2 += \ tests/elementary/elm_suite.h \ lib/elementary/Elementary_Options.h.in \ lib/elementary/elm_code_widget_text.c \ lib/elementary/elm_code_widget_undo.c diff --git a/src/lib/elementary/elm_list.c b/src/lib/elementary/elm_list.c index 0119a66633..f705436627 100644 --- a/src/lib/elementary/elm_list.c +++ b/src/lib/elementary/elm_list.c @@ -1,3217 +1,3217 @@ #ifdef HAVE_CONFIG_H # include "elementary_config.h" #endif #define EFL_ACCESS_OBJECT_PROTECTED #define EFL_ACCESS_WIDGET_ACTION_PROTECTED #define EFL_ACCESS_SELECTION_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED #define EFL_UI_L10N_PROTECTED #include #include "elm_priv.h" #include "elm_widget_list.h" #include "elm_interface_scrollable.h" #define MY_CLASS ELM_LIST_CLASS #define MY_CLASS_NAME "Elm_List" #define MY_CLASS_NAME_LEGACY "elm_list" #define ELM_LIST_SWIPE_TIME 0.4 static const char SIG_ACTIVATED[] = "activated"; static const char SIG_CLICKED_DOUBLE[] = "clicked,double"; static const char SIG_CLICKED_RIGHT[] = "clicked,right"; static const char SIG_SELECTED[] = "selected"; static const char SIG_UNSELECTED[] = "unselected"; static const char SIG_LONGPRESSED[] = "longpressed"; static const char SIG_EDGE_TOP[] = "edge,top"; static const char SIG_EDGE_BOTTOM[] = "edge,bottom"; static const char SIG_EDGE_LEFT[] = "edge,left"; static const char SIG_EDGE_RIGHT[] = "edge,right"; static const char SIG_SWIPE[] = "swipe"; static const char SIG_HIGHLIGHTED[] = "highlighted"; static const char SIG_UNHIGHLIGHTED[] = "unhighlighted"; static const char SIG_ITEM_FOCUSED[] = "item,focused"; static const char SIG_ITEM_UNFOCUSED[] = "item,unfocused"; static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_ACTIVATED, ""}, {SIG_CLICKED_DOUBLE, ""}, {SIG_CLICKED_RIGHT, ""}, {SIG_SELECTED, ""}, {SIG_UNSELECTED, ""}, {SIG_LONGPRESSED, ""}, {SIG_EDGE_TOP, ""}, {SIG_EDGE_BOTTOM, ""}, {SIG_EDGE_LEFT, ""}, {SIG_EDGE_RIGHT, ""}, {SIG_SWIPE, ""}, {SIG_HIGHLIGHTED, ""}, {SIG_UNHIGHLIGHTED, ""}, {SIG_ITEM_FOCUSED, ""}, {SIG_ITEM_UNFOCUSED, ""}, {SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */ {SIG_WIDGET_ACCESS_CHANGED, ""}, /**< handled by elm_widget */ {SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */ {SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */ {NULL, NULL} }; static void _size_hints_changed_cb(void *, Evas *, Evas_Object *, void *); static void _mouse_up_cb(void *, Evas *, Evas_Object *, void *); static void _mouse_down_cb(void *, Evas *, Evas_Object *, void *); static void _mouse_move_cb(void *, Evas *, Evas_Object *, void *); static void _mouse_in_cb(void *, Evas *, Evas_Object *, void *); static void _items_fix(Evas_Object *); static Eina_Bool _key_action_move(Evas_Object *obj, const char *params); static Eina_Bool _key_action_select(Evas_Object *obj, const char *params); static Eina_Bool _key_action_escape(Evas_Object *obj, const char *params); EOLIAN static void _elm_list_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item); static const Elm_Action key_actions[] = { {"move", _key_action_move}, {"select", _key_action_select}, {"escape", _key_action_escape}, {NULL, NULL} }; static void _items_safe_process(Eina_List *items, void (*process)(void* data, Elm_Object_Item *sel, Elm_List_Item_Data *it), void *data) { Elm_Object_Item *sel; Eina_List *l; Eina_Array walk; eina_array_step_set(&walk, sizeof (walk), 4); EINA_LIST_FOREACH(items, l, sel) eina_array_push(&walk, efl_ref(sel)); while ((sel = eina_array_pop(&walk))) { if (efl_invalidated_get(sel)) goto noneed; ELM_LIST_ITEM_DATA_GET(sel, it); process(data, sel, it); noneed: efl_unref(sel); } eina_array_flush(&walk); } static Eina_Bool _is_no_select(Elm_List_Item_Data *it) { ELM_LIST_DATA_GET_FROM_ITEM(it, sd); if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) || (sd->select_mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)) return EINA_TRUE; return EINA_FALSE; } static void _elm_list_item_efl_object_invalidate(Elm_Object_Item *eo_it, Elm_List_Item_Data *it) { ELM_LIST_DATA_GET_FROM_ITEM(it, sd); if (sd->focused_item == eo_it) sd->focused_item = NULL; if (sd->last_focused_item == eo_it) sd->last_focused_item = NULL; if (sd->last_selected_item == eo_it) sd->last_selected_item = NULL; evas_object_event_callback_del_full (VIEW(it), EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, it); evas_object_event_callback_del_full (VIEW(it), EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, it); evas_object_event_callback_del_full (VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, it); evas_object_event_callback_del_full (VIEW(it), EVAS_CALLBACK_MOUSE_IN, _mouse_in_cb, it); if (it->icon) evas_object_event_callback_del_full (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, WIDGET(it)); if (it->end) evas_object_event_callback_del_full (it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, WIDGET(it)); efl_invalidate(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); } static void _elm_list_item_efl_object_destructor(Elm_Object_Item *eo_it, Elm_List_Item_Data *it) { ELM_SAFE_FREE(it->label, eina_stringshare_del); ELM_SAFE_FREE(it->swipe_timer, ecore_timer_del); ELM_SAFE_FREE(it->long_timer, ecore_timer_del); ELM_SAFE_FREE(it->icon, evas_object_del); ELM_SAFE_FREE(it->end, evas_object_del); efl_destructor(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); } static Eina_Bool _item_multi_select_up(Elm_List_Data *sd) { Elm_Object_Item *prev; if (!sd->selected) return EINA_FALSE; if (!sd->multi) return EINA_FALSE; prev = elm_list_item_prev(sd->last_selected_item); while (prev) { if (!elm_object_item_disabled_get(prev)) break; prev = elm_list_item_prev(prev); } if (!prev) return EINA_TRUE; if (elm_list_item_selected_get(prev)) { elm_list_item_selected_set(sd->last_selected_item, EINA_FALSE); sd->last_selected_item = prev; } else { elm_list_item_selected_set(prev, EINA_TRUE); } return EINA_TRUE; } static Eina_Bool _item_multi_select_down(Elm_List_Data *sd) { Elm_Object_Item *next; if (!sd->selected) return EINA_FALSE; if (!sd->multi) return EINA_FALSE; next = elm_list_item_next(sd->last_selected_item); while (next) { if (!elm_object_item_disabled_get(next)) break; next = elm_list_item_next(next); } if (!next) return EINA_TRUE; if (elm_list_item_selected_get(next)) { elm_list_item_selected_set(sd->last_selected_item, EINA_FALSE); sd->last_selected_item = next; } else { elm_list_item_selected_set(next, EINA_TRUE); } return EINA_TRUE; } static Eina_Bool _all_items_unselect(Elm_List_Data *sd) { if (!sd->selected) return EINA_FALSE; while (sd->selected) elm_list_item_selected_set (sd->selected->data, EINA_FALSE); return EINA_TRUE; } static Eina_Bool _item_single_select_up(Elm_List_Data *sd) { Elm_Object_Item *prev; if (!sd->selected) prev = eina_list_data_get(eina_list_last(sd->items)); else prev = elm_list_item_prev(sd->last_selected_item); while (prev) { if (!elm_object_item_disabled_get(prev)) break; prev = elm_list_item_prev(prev); } if (!prev) return EINA_FALSE; _all_items_unselect(sd); elm_list_item_selected_set(prev, EINA_TRUE); return EINA_TRUE; } static Eina_Bool _item_single_select_down(Elm_List_Data *sd) { Elm_Object_Item *next; if (!sd->selected) next = eina_list_data_get(sd->items); else next = elm_list_item_next(sd->last_selected_item); while (next) { if (!elm_object_item_disabled_get(next)) break; next = elm_list_item_next(next); } if (!next) return EINA_FALSE; _all_items_unselect(sd); elm_list_item_selected_set(next, EINA_TRUE); return EINA_TRUE; } static Eina_Bool _elm_list_item_content_focus_set(Elm_List_Item_Data *it, Elm_Focus_Direction dir, Eina_Bool h_mode) { if (!it) return EINA_FALSE; ELM_LIST_DATA_GET_FROM_ITEM(it, sd); if (!sd->focus_on_selection_enabled) return EINA_FALSE; if ((h_mode && (dir != ELM_FOCUS_UP) && (dir != ELM_FOCUS_DOWN)) || (!h_mode && (dir != ELM_FOCUS_LEFT) && (dir != ELM_FOCUS_RIGHT))) return EINA_FALSE; int focus_objs = 0; Evas_Object *focus_chain[2]; Evas_Object *focused = NULL; int idx; if (it->icon && elm_object_widget_check(it->icon) && elm_object_focus_allow_get(it->icon)) focus_chain[focus_objs++] = it->icon; if (it->end && elm_object_widget_check(it->end) && elm_object_focus_allow_get(it->end)) focus_chain[focus_objs++] = it->end; if (!focus_objs) return EINA_FALSE; for (idx = 0; idx < focus_objs; idx++) { if (elm_object_focus_get(focus_chain[idx])) { focused = focus_chain[idx]; break; } } if (!focused) { elm_object_focus_set(focus_chain[0], EINA_TRUE); return EINA_TRUE; } /* FOCUS-FIXME if (dir != ELM_FOCUS_PREVIOUS) { Evas_Object *nextfocus; Elm_Object_Item *nextfocus_item; if (efl_ui_widget_focus_next_get(focused, dir, &nextfocus, &nextfocus_item)) { if (nextfocus_item) elm_object_item_focus_set(nextfocus_item, EINA_TRUE); else elm_object_focus_set(nextfocus, EINA_TRUE); return EINA_TRUE; } idx += ((dir == ELM_FOCUS_UP) || (dir == ELM_FOCUS_LEFT)) ? -1 : 1; if (idx < 0) idx = focus_objs - 1; if (idx >= focus_objs) idx = 0; focused = focus_chain[idx]; } */ elm_object_focus_set(focused, EINA_TRUE); return EINA_TRUE; } static Elm_Object_Item * _next_item_get(Elm_List_Data *sd, Elm_Object_Item *eo_cur, Elm_Focus_Direction dir) { Eina_List *list = NULL; Elm_Object_Item *eo_it = NULL; list = eina_list_data_find_list(sd->items, eo_cur); if (!list) return NULL; if ((!sd->h_mode && (dir == ELM_FOCUS_UP)) || ((sd->h_mode) && (dir == ELM_FOCUS_LEFT))) eo_it = eina_list_data_get(eina_list_prev(list)); else if (((!sd->h_mode) && (dir == ELM_FOCUS_DOWN)) || ((sd->h_mode) && (dir == ELM_FOCUS_RIGHT))) eo_it = eina_list_data_get(eina_list_next(list)); return eo_it; } static Eina_Bool _item_focused_next(Evas_Object *obj, Elm_Focus_Direction dir) { ELM_LIST_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE); Elm_Object_Item *eo_it = NULL; if (sd->focused_item) eo_it = _next_item_get(sd, sd->focused_item, dir); while (eo_it && elm_object_item_disabled_get(eo_it)) { eo_it = _next_item_get(sd, eo_it, dir); } if (eo_it) { elm_object_item_focus_set(eo_it, EINA_TRUE); return EINA_TRUE; } return EINA_FALSE; } static Eina_Bool _elm_list_efl_ui_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool multi) { Elm_Object_Item *eo_it = NULL; ELM_LIST_DATA_GET(obj, sd); Eina_Bool ret = EINA_FALSE; Evas_Coord v = 0; Evas_Coord min = 0; Eina_Bool focus_only = EINA_FALSE; // check if the content can get the focus by direction key ELM_LIST_ITEM_DATA_GET(elm_object_focused_item_get(obj) , it); if (_elm_list_item_content_focus_set(it, dir, sd->h_mode)) return EINA_TRUE; if ((sd->h_mode && (dir != ELM_FOCUS_LEFT) && (dir != ELM_FOCUS_RIGHT)) || (!sd->h_mode && (dir != ELM_FOCUS_UP) && (dir != ELM_FOCUS_DOWN))) return EINA_FALSE; // check if list get focus at first focus_only = _elm_config->item_select_on_focus_disable; if (!sd->focused_item) { if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_UP)) eo_it = elm_list_last_item_get(obj); else eo_it = elm_list_first_item_get(obj); if (focus_only) elm_object_item_focus_set(eo_it, EINA_TRUE); else elm_list_item_selected_set(eo_it, EINA_TRUE); return EINA_TRUE; } // get content size and viewport size if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_RIGHT)) { elm_interface_scrollable_content_viewport_geometry_get (obj, NULL, NULL, &v, NULL); elm_interface_scrollable_content_size_get(obj, &min, NULL); } else { elm_interface_scrollable_content_viewport_geometry_get (obj, NULL, NULL, NULL, &v); elm_interface_scrollable_content_size_get(obj, NULL, &min); } // move focus or selection according to the configuration if (focus_only) ret = _item_focused_next(obj, dir); else { if (multi) { if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_UP)) ret = _item_multi_select_up(sd); else ret = _item_multi_select_down(sd); } else { if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_UP)) ret = _item_single_select_up(sd); else ret = _item_single_select_down(sd); } } if (ret) return EINA_TRUE; // handle item loop feature if (sd->item_loop_enable && !sd->item_looping_on) { if (min > v) { if (dir == ELM_FOCUS_LEFT) { elm_layout_signal_emit(obj, "elm,action,looping,left", "elm"); sd->item_looping_on = EINA_TRUE; } else if (dir == ELM_FOCUS_RIGHT) { elm_layout_signal_emit(obj, "elm,action,looping,right", "elm"); sd->item_looping_on = EINA_TRUE; } else if (dir == ELM_FOCUS_UP) { elm_layout_signal_emit(obj, "elm,action,looping,up", "elm"); sd->item_looping_on = EINA_TRUE; } else if (dir == ELM_FOCUS_DOWN) { elm_layout_signal_emit(obj, "elm,action,looping,down", "elm"); sd->item_looping_on = EINA_TRUE; } } else { if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_UP)) eo_it = elm_list_last_item_get(obj); else eo_it = elm_list_first_item_get(obj); if (focus_only) elm_object_item_focus_set(eo_it, EINA_TRUE); else elm_list_item_selected_set(eo_it, EINA_TRUE); } return EINA_TRUE; } else if (sd->item_looping_on) return EINA_TRUE; return EINA_FALSE; } static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) { ELM_LIST_DATA_GET(obj, sd); const char *dir = params; Evas_Coord x = 0; Evas_Coord y = 0; Evas_Coord v_w = 0; Evas_Coord v_h = 0; Evas_Coord step_x = 0; Evas_Coord step_y = 0; Evas_Coord page_x = 0; Evas_Coord page_y = 0; Elm_Object_Item *it = NULL; if (!sd->items) return EINA_FALSE; elm_interface_scrollable_content_pos_get(obj, &x, &y); elm_interface_scrollable_step_size_get(obj, &step_x, &step_y); elm_interface_scrollable_page_size_get(obj, &page_x, &page_y); elm_interface_scrollable_content_viewport_geometry_get (obj, NULL, NULL, &v_w, &v_h); _elm_widget_focus_auto_show(obj); /* TODO: fix logic for horizontal mode */ if (!strcmp(dir, "left")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_LEFT, EINA_FALSE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "left_multi")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_LEFT, EINA_TRUE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "right")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_RIGHT, EINA_FALSE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "right_multi")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_RIGHT, EINA_TRUE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "up")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_UP, EINA_FALSE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "up_multi")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_UP, EINA_TRUE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "down")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_DOWN, EINA_FALSE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "down_multi")) { if (_elm_list_efl_ui_widget_event_direction(obj, ELM_FOCUS_DOWN, EINA_TRUE)) return EINA_TRUE; else return EINA_FALSE; } else if (!strcmp(dir, "first")) { it = eina_list_data_get(sd->items); if (it) { elm_list_item_selected_set(it, EINA_TRUE); return EINA_TRUE; } else return EINA_FALSE; } else if (!strcmp(dir, "last")) { it = eina_list_data_get(eina_list_last(sd->items)); if (it) { elm_list_item_selected_set(it, EINA_TRUE); return EINA_TRUE; } else return EINA_FALSE; } else if (!strcmp(dir, "prior")) { if (sd->h_mode) { if (page_x < 0) x -= -(page_x * v_w) / 100; else x -= page_x; } else { if (page_y < 0) y -= -(page_y * v_h) / 100; else y -= page_y; } } else if (!strcmp(dir, "next")) { if (sd->h_mode) { if (page_x < 0) x += -(page_x * v_w) / 100; else x += page_x; } else { if (page_y < 0) y += -(page_y * v_h) / 100; else y += page_y; } } else return EINA_FALSE; elm_interface_scrollable_content_pos_set(obj, x, y, EINA_TRUE); return EINA_TRUE; } static Eina_Bool _key_action_select(Evas_Object *obj, const char *params EINA_UNUSED) { ELM_LIST_DATA_GET(obj, sd); Elm_Object_Item *eo_it = NULL; if (!sd->items) return EINA_FALSE; if (!_elm_config->item_select_on_focus_disable && (!sd->multi) && (sd->selected)) eo_it = elm_list_selected_item_get(obj); else eo_it = elm_object_focused_item_get(obj); elm_list_item_selected_set(eo_it, EINA_TRUE); if (eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); efl_event_callback_legacy_call (WIDGET(it), ELM_LIST_EVENT_ACTIVATED, eo_it); } return EINA_TRUE; } static Eina_Bool _key_action_escape(Evas_Object *obj, const char *params EINA_UNUSED) { ELM_LIST_DATA_GET(obj, sd); if (!sd->items) return EINA_FALSE; if (!_all_items_unselect(sd)) return EINA_FALSE; return EINA_TRUE; } EOLIAN static void _elm_list_efl_ui_l10n_translation_update(Eo *obj EINA_UNUSED, Elm_List_Data *sd) { Elm_Object_Item *it; Eina_List *l; EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); efl_ui_l10n_translation_update(efl_super(obj, MY_CLASS)); } EOLIAN static void _elm_list_elm_layout_sizing_eval(Eo *obj, Elm_List_Data *sd) { Evas_Coord vw = 0, vh = 0; Evas_Coord minw = 0, minh = 0, maxw = 0, maxh = 0, w = 0, h = 0, vmw = 0, vmh = 0; double xw = 0.0, yw = 0.0; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); if (!efl_finalized_get(obj)) return; //not constructed yet evas_object_size_hint_combined_min_get(sd->box, &minw, &minh); evas_object_size_hint_max_get(sd->box, &maxw, &maxh); evas_object_size_hint_weight_get(sd->box, &xw, &yw); elm_interface_scrollable_content_viewport_geometry_get (obj, NULL, NULL, &vw, &vh); if (xw > 0.0) { if ((minw > 0) && (vw < minw)) vw = minw; else if ((maxw > 0) && (vw > maxw)) vw = maxw; } else if (minw > 0) vw = minw; if (yw > 0.0) { if ((minh > 0) && (vh < minh)) vh = minh; else if ((maxh > 0) && (vh > maxh)) vh = maxh; } else if (minh > 0) vh = minh; evas_object_resize(sd->box, vw, vh); w = -1; h = -1; edje_object_size_min_calc (wd->resize_obj, &vmw, &vmh); if (sd->scr_minw) w = vmw + minw; if (sd->scr_minh) h = vmh + minh; evas_object_size_hint_max_get(obj, &maxw, &maxh); if ((maxw > 0) && (w > maxw)) w = maxw; if ((maxh > 0) && (h > maxh)) h = maxh; evas_object_size_hint_min_set(obj, w, h); } static void _elm_list_content_min_limit_cb(Evas_Object *obj, Eina_Bool w, Eina_Bool h) { ELM_LIST_DATA_GET(obj, sd); if ((sd->mode == ELM_LIST_LIMIT) || (sd->mode == ELM_LIST_EXPAND)) return; sd->scr_minw = !!w; sd->scr_minh = !!h; elm_layout_sizing_eval(obj); } static void _elm_list_mode_set_internal(Evas_Object *obj) { Elm_List_Data *sd = efl_data_scope_get(obj, MY_CLASS); if (sd->mode == ELM_LIST_LIMIT) { if (!sd->h_mode) { sd->scr_minw = EINA_TRUE; sd->scr_minh = EINA_FALSE; } else { sd->scr_minw = EINA_FALSE; sd->scr_minh = EINA_TRUE; } } else if (sd->mode == ELM_LIST_EXPAND) { sd->scr_minw = EINA_TRUE; sd->scr_minh = EINA_TRUE; } else if (sd->mode == ELM_LIST_COMPRESS) { sd->scr_minw = EINA_FALSE; sd->scr_minh = EINA_FALSE; } elm_layout_sizing_eval(obj); } static inline void _elm_list_walk(Evas_Object *obj, Elm_List_Data *sd) { if (sd->walking < 0) { ERR("ERROR: walking was negative. fixed!\n"); sd->walking = 0; } sd->walking++; efl_ref(obj); evas_object_ref(obj); } static inline void _elm_list_unwalk(Evas_Object *obj, Elm_List_Data *sd) { sd->walking--; if (sd->walking < 0) { ERR("ERROR: walking became negative. fixed!\n"); sd->walking = 0; } if (sd->walking) goto cleanup; if (sd->fix_pending) { sd->fix_pending = EINA_FALSE; _items_fix(obj); elm_layout_sizing_eval(obj); } cleanup: evas_object_unref(obj); efl_unref(obj); } static void _items_fix(Evas_Object *obj) { Evas_Coord minw[2] = { 0, 0 }, minh[2] = { 0, 0 }; const Eina_List *l; Elm_Object_Item *eo_it; Evas_Coord mw, mh; int i, redo = 0; Eina_Array walk; const char *style; const char *it_odd; const char *it_plain; const char *it_compress; const char *it_compress_odd; ELM_LIST_DATA_GET(obj, sd); style = elm_widget_style_get(obj); it_plain = sd->h_mode ? "h_item" : "item"; it_odd = sd->h_mode ? "h_item_odd" : "item_odd"; it_compress = sd->h_mode ? "h_item_compress" : "item_compress"; it_compress_odd = sd->h_mode ? "h_item_compress_odd" : "item_compress_odd"; if (sd->walking) { sd->fix_pending = EINA_TRUE; return; } _elm_list_walk(obj, sd); // watch out "return" before unwalk! sd->fixing_now = EINA_TRUE; eina_array_step_set(&walk, sizeof (walk), 8); EINA_LIST_FOREACH(sd->items, l, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); if (!it) continue; if (it->deleted) continue; if (it->icon) { evas_object_size_hint_combined_min_get(it->icon, &mw, &mh); if (mw > minw[0]) minw[0] = mw; if (mh > minh[0]) minh[0] = mh; } if (it->end) { evas_object_size_hint_combined_min_get(it->end, &mw, &mh); if (mw > minw[1]) minw[1] = mw; if (mh > minh[1]) minh[1] = mh; } eina_array_push(&walk, efl_ref(eo_it)); } if ((minw[0] != sd->minw[0]) || (minw[1] != sd->minw[1]) || (minh[0] != sd->minh[0]) || (minh[1] != sd->minh[1])) { sd->minw[0] = minw[0]; sd->minw[1] = minw[1]; sd->minh[0] = minh[0]; sd->minh[1] = minh[1]; redo = 1; } i = 0; while ((eo_it = eina_array_pop(&walk))) { if (efl_invalidated_get(eo_it)) goto noneed; ELM_LIST_ITEM_DATA_GET(eo_it, it); if (!it) goto noneed; if (it->deleted) goto noneed; it->even = i & 0x1; if ((it->even != it->is_even) || (!it->fixed) || (redo)) { const char *stacking; if (it->is_separator) elm_widget_theme_object_set (obj, VIEW(it), "separator", sd->h_mode ? "vertical" : "horizontal", style); else if (sd->mode == ELM_LIST_COMPRESS) { if (it->even) elm_widget_theme_object_set (obj, VIEW(it), "list", it_compress, style); else elm_widget_theme_object_set (obj, VIEW(it), "list", it_compress_odd, style); } else { if (it->even) elm_widget_theme_object_set (obj, VIEW(it), "list", it_plain, style); else elm_widget_theme_object_set (obj, VIEW(it), "list", it_odd, style); } stacking = edje_object_data_get(VIEW(it), "stacking"); if (stacking) { if (!strcmp(stacking, "below")) evas_object_lower(VIEW(it)); else if (!strcmp(stacking, "above")) evas_object_raise(VIEW(it)); } if (!it->is_separator) { edje_object_part_text_escaped_set (VIEW(it), "elm.text", it->label); elm_wdg_item_part_text_custom_update(EO_OBJ(it)); if ((!it->icon) && (minh[0] > 0)) { it->icon = evas_object_rectangle_add (evas_object_evas_get(VIEW(it))); evas_object_color_set(it->icon, 0, 0, 0, 0); it->dummy_icon = EINA_TRUE; } if ((!it->end) && (minh[1] > 0)) { it->end = evas_object_rectangle_add (evas_object_evas_get(VIEW(it))); evas_object_color_set(it->end, 0, 0, 0, 0); it->dummy_end = EINA_TRUE; } if (eina_list_count(sd->items) == 1) { edje_object_signal_emit (VIEW(it), "elm,state,list,single", "elm"); } else if (l == sd->items) //1st item { edje_object_signal_emit (VIEW(it), "elm,state,list,first", "elm"); } else if (l == eina_list_last(sd->items)) { edje_object_signal_emit (VIEW(it), "elm,state,list,last", "elm"); } else { edje_object_signal_emit (VIEW(it), "elm,state,list,middle", "elm"); } } if (!it->fixed) { // this may call up user and it may modify the list item // but we're safe as we're flagged as walking. // just don't process further edje_object_message_signal_process(VIEW(it)); if (it->deleted) goto noneed; mw = mh = -1; if (!it->is_separator) elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc (VIEW(it), &mw, &mh, mw, mh); /* FIXME: this fixed T179 but introduced T286. Temporarily disable these lines until it gets fixed correctly. Evas_Coord ew, eh; edje_object_parts_extends_calc (VIEW(it), NULL, NULL, &ew, &eh); mw = mw > ew ? mw : ew; mh = mh > eh ? mh : eh; */ evas_object_size_hint_min_set(VIEW(it), mw, mh); evas_object_show(VIEW(it)); } if ((it->selected) || (it->highlighted)) { const char *select_raise; // this may call up user and it may modify the list item // but we're safe as we're flagged as walking. // just don't process further edje_object_signal_emit (VIEW(it), "elm,state,selected", "elm"); if (it->deleted) goto noneed; select_raise = edje_object_data_get(VIEW(it), "selectraise"); if ((select_raise) && (!strcmp(select_raise, "on"))) evas_object_raise(VIEW(it)); } if (it->base->disabled) edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm"); it->fixed = EINA_TRUE; it->is_even = it->even; } if (it->icon) { evas_object_size_hint_min_set(it->icon, minw[0], minh[0]); edje_object_part_swallow (VIEW(it), "elm.swallow.icon", it->icon); } if (it->end) { evas_object_size_hint_min_set(it->end, minw[1], minh[1]); edje_object_part_swallow (VIEW(it), "elm.swallow.end", it->end); } if (!it->is_separator) i++; noneed: efl_unref(eo_it); } sd->fixing_now = EINA_FALSE; _elm_list_unwalk(obj, sd); //focus highlight in_theme is set by list item theme. _elm_widget_item_highlight_in_theme( obj, elm_list_first_item_get(obj)); } static void _size_hints_changed_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { ELM_LIST_DATA_GET(data, sd); ELM_WIDGET_DATA_GET_OR_RETURN(data, wd); if (sd->delete_me) return; /* FIXME: Looks it updates items_fix() unnecessarily. when resize_obj, box finished sizing, then it can call _items_fix() one time at the end. */ if (sd->fixing_now) { if ((obj != wd->resize_obj) && (obj != sd->box)) return; } _items_fix(data); elm_layout_sizing_eval(data); } /* FIXME: take off later. maybe this show region coords belong in the * interface (new api functions, set/get)? */ static void _show_region_hook(void *data EINA_UNUSED, Evas_Object *obj, Eina_Rect r) { elm_interface_scrollable_content_region_set(obj, r.x, r.y, r.w, r.h); } EOLIAN static void _elm_list_efl_ui_widget_disabled_set(Eo *obj, Elm_List_Data *sd, Eina_Bool disabled) { efl_ui_widget_disabled_set(efl_super(obj, MY_CLASS), disabled); if (efl_ui_widget_disabled_get(obj)) { elm_widget_scroll_freeze_push(obj); elm_widget_scroll_hold_push(obj); /* FIXME: if we get to have a way to only un-highlight items * in the future, keeping them selected... */ _all_items_unselect(sd); } else { elm_widget_scroll_freeze_pop(obj); elm_widget_scroll_hold_pop(obj); } } static void _mirrored_set(Evas_Object *obj, Eina_Bool rtl) { Elm_Object_Item *eo_it; Eina_List *n; ELM_LIST_DATA_GET(obj, sd); efl_ui_mirrored_set(obj, rtl); EINA_LIST_FOREACH(sd->items, n, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); edje_object_mirrored_set(VIEW(it), rtl); } } EOLIAN static Eina_Error _elm_list_efl_ui_widget_theme_apply(Eo *obj, Elm_List_Data *sd) { Elm_Object_Item *eo_it; Eina_List *n; Eina_Error int_ret = EFL_UI_THEME_APPLY_ERROR_GENERIC; int_ret = efl_ui_widget_theme_apply(efl_super(obj, MY_CLASS)); if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret; _mirrored_set(obj, efl_ui_mirrored_get(obj)); EINA_LIST_FOREACH(sd->items, n, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); edje_object_scale_set (VIEW(it), efl_gfx_entity_scale_get(obj) * elm_config_scale_get()); it->fixed = EINA_FALSE; } _items_fix(obj); elm_layout_sizing_eval(obj); return int_ret; } static void _elm_list_item_focused(Elm_Object_Item *eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); Evas_Object *win = elm_widget_top_get(WIDGET(it)); Evas_Coord x, y, w, h, sx, sy, sw, sh; const char *focus_raise; if ((!sd) || _is_no_select(it) || (eo_it == sd->focused_item)) return; evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); evas_object_geometry_get(sd->hit_rect, &sx, &sy, &sw, &sh); if (!ELM_RECTS_INCLUDE(sx, sy, sw, sh, x, y, w, h)) { switch (_elm_config->focus_autoscroll_mode) { case ELM_FOCUS_AUTOSCROLL_MODE_SHOW: elm_list_item_show(eo_it); break; case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN: elm_list_item_bring_in(eo_it); break; default: break; } } sd->focused_item = eo_it; if (elm_win_focus_highlight_enabled_get(win) || _elm_config->win_auto_focus_enable) { edje_object_signal_emit (VIEW(it), "elm,state,focused", "elm"); } focus_raise = edje_object_data_get(VIEW(it), "focusraise"); if ((focus_raise) && (!strcmp(focus_raise, "on"))) evas_object_raise(VIEW(it)); efl_event_callback_legacy_call (WIDGET(it), ELM_LIST_EVENT_ITEM_FOCUSED, eo_it); if (_elm_config->atspi_mode) efl_access_state_changed_signal_emit(eo_it, EFL_ACCESS_STATE_TYPE_FOCUSED, EINA_TRUE); } static void _elm_list_item_unfocused(Elm_Object_Item *eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); Evas_Object *obj = WIDGET(it); Evas_Object *win = elm_widget_top_get(obj); ELM_LIST_DATA_GET(obj, sd); if ((!sd) || (!sd->focused_item) || (eo_it != sd->focused_item)) return; if (_is_no_select(it)) return; if (elm_win_focus_highlight_enabled_get(win) || _elm_config->win_auto_focus_enable) { ELM_LIST_ITEM_DATA_GET(sd->focused_item, focus_it); edje_object_signal_emit (VIEW(focus_it), "elm,state,unfocused", "elm"); } sd->focused_item = NULL; efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_ITEM_UNFOCUSED, eo_it); if (_elm_config->atspi_mode) efl_access_state_changed_signal_emit(eo_it, EFL_ACCESS_STATE_TYPE_FOCUSED, EINA_FALSE); } /* * This function searches the nearest visible item based on the given item. * If the given item is in the list viewport, this returns the given item. * Or this searches other items and checks the nearest fully visible item * according to the given item's position. */ static Elm_List_Item_Data * _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *it) { Evas_Coord vx = 0, vy = 0, vw = 0, vh = 0; // list viewport geometry Evas_Coord ix = 0, iy = 0, iw = 0, ih = 0; // given item geometry Evas_Coord cx = 0, cy = 0, cw = 0, ch = 0; // candidate item geometry Eina_List *item_list = NULL; Elm_List_Item_Data *item = NULL; ELM_LIST_DATA_GET(obj, sd); Eina_Bool search_next = EINA_FALSE; if (!it) return NULL; evas_object_geometry_get(obj, &vx, &vy, &vw, &vh); evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih)) { if (!elm_object_item_disabled_get(EO_OBJ(it))) return it; else search_next = EINA_TRUE; } item_list = eina_list_data_find_list(sd->items, EO_OBJ(it)); if ((!sd->h_mode && (iy < vy)) || (sd->h_mode && (iw < vw)) || search_next) { while ((item_list = eina_list_next(item_list))) { item = efl_data_scope_get(eina_list_data_get(item_list), ELM_LIST_ITEM_CLASS); if (!item) continue; evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && !elm_object_item_disabled_get(EO_OBJ(item))) { return item; } } } else { while ((item_list = eina_list_prev(item_list))) { item = efl_data_scope_get(eina_list_data_get(item_list), ELM_LIST_ITEM_CLASS); if (!item) continue; evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && !elm_object_item_disabled_get(EO_OBJ(item))) { return item; } } } return it; } EOLIAN static Eina_Bool _elm_list_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_List_Data *sd) { Eina_Bool int_ret = EINA_FALSE; Elm_Object_Item *eo_it = NULL; Eina_Bool is_sel = EINA_FALSE; int_ret = efl_ui_focus_object_on_focus_update(efl_super(obj, MY_CLASS)); if (!int_ret) return EINA_FALSE; if (elm_object_focus_get(obj) && sd->selected && !sd->last_selected_item) { Elm_Object_Item *sel = eina_list_data_get(sd->selected); sd->last_selected_item = efl_data_scope_get(sel, ELM_LIST_ITEM_CLASS); } if (!sd->items) return EINA_FALSE; if (elm_object_focus_get(obj) && !sd->mouse_down) { if (sd->last_focused_item) eo_it = sd->last_focused_item; else if (sd->last_selected_item) eo_it = sd->last_selected_item; else if (_elm_config->first_item_focus_on_first_focus_in) { eo_it = elm_list_first_item_get(obj); is_sel = EINA_TRUE; } if (eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); it = _elm_list_nearest_visible_item_get(obj, it); if (it) { if (!_elm_config->item_select_on_focus_disable && is_sel) elm_list_item_selected_set(EO_OBJ(it), EINA_TRUE); else _elm_list_item_focused(EO_OBJ(it)); } } } else { sd->last_focused_item = sd->focused_item; if (sd->focused_item) _elm_list_item_unfocused(sd->focused_item); } return EINA_TRUE; } EOLIAN static Eina_Bool _elm_list_efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_List_Data *sd, Evas_Object *sobj) { const Eina_List *l; Elm_Object_Item *eo_it; Eina_Bool int_ret = EINA_FALSE; int_ret = elm_widget_sub_object_del(efl_super(obj, MY_CLASS), sobj); if (!int_ret) return EINA_FALSE; if ((sobj == sd->box) || (sobj == obj)) goto end; EINA_LIST_FOREACH(sd->items, l, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); if ((sobj == it->icon) || (sobj == it->end)) { if (it->icon == sobj) it->icon = NULL; if (it->end == sobj) it->end = NULL; evas_object_event_callback_del_full (sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); efl_del(eo_it); if (!sd->walking && efl_parent_get(obj)) { _items_fix(obj); elm_layout_sizing_eval(obj); } else sd->fix_pending = EINA_TRUE; break; } } end: return EINA_TRUE; } static void _item_highlight(Elm_List_Item_Data *it) { Elm_Object_Item *eo = EO_OBJ(it); Evas_Object *obj; const char *select_raise; if (efl_invalidated_get(eo)) return ; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if (_is_no_select(it) || (it->highlighted) || (it->base->disabled)) return; efl_ref(EO_OBJ(it)); // This is done to delay the update of a theme change if items_fix get called _elm_list_walk(obj, sd); edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_HIGHLIGHTED, EO_OBJ(it)); select_raise = edje_object_data_get(VIEW(it), "selectraise"); if ((select_raise) && (!strcmp(select_raise, "on"))) evas_object_raise(VIEW(it)); it->highlighted = EINA_TRUE; _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _item_select(Elm_List_Item_Data *it) { Elm_Object_Item *eo = EO_OBJ(it); Evas_Object *obj; if (efl_invalidated_get(eo)) return ; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); Elm_Object_Item *eo_it = EO_OBJ(it); if (it->base->disabled || _is_no_select(it)) return; if (!sd->focus_on_selection_enabled) { if (it->icon && elm_object_widget_check(it->icon) && elm_object_focus_get(it->icon)) { elm_object_focus_set(obj, EINA_FALSE); elm_object_focus_set(obj, EINA_TRUE); } else if (it->end && elm_object_widget_check(it->end) && elm_object_focus_get(it->end)) { elm_object_focus_set(obj, EINA_FALSE); elm_object_focus_set(obj, EINA_TRUE); } } if (it->selected) { if (sd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS) goto call; return; } _elm_list_item_content_focus_set(it, ELM_FOCUS_PREVIOUS, sd->h_mode); it->selected = EINA_TRUE; sd->selected = eina_list_append(sd->selected, eo_it); call: efl_ref(EO_OBJ(it)); _elm_list_walk(obj, sd); if (it->func) it->func((void *)WIDGET_ITEM_DATA_GET(eo_it), WIDGET(it), eo_it); efl_event_callback_legacy_call(obj, EFL_UI_EVENT_SELECTED, eo_it); if (_elm_config->atspi_mode) efl_access_state_changed_signal_emit(eo_it, EFL_ACCESS_STATE_TYPE_SELECTED, EINA_TRUE); sd->last_selected_item = eo_it; _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _item_unhighlight(Elm_List_Item_Data *it) { Elm_Object_Item *eo = EO_OBJ(it); Evas_Object *obj; const char *stacking, *select_raise; if (efl_invalidated_get(eo)) return ; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); // if ((!it->highlighted) || (it->base->disabled) || // (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) return; if (!it->highlighted) return; efl_ref(EO_OBJ(it)); _elm_list_walk(obj, sd); edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm"); efl_event_callback_legacy_call (obj, ELM_LIST_EVENT_UNHIGHLIGHTED, EO_OBJ(it)); stacking = edje_object_data_get(VIEW(it), "stacking"); select_raise = edje_object_data_get(VIEW(it), "selectraise"); if ((select_raise) && (!strcmp(select_raise, "on"))) { if ((stacking) && (!strcmp(stacking, "below"))) evas_object_lower(VIEW(it)); } it->highlighted = EINA_FALSE; _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _item_unselect(Elm_List_Item_Data *it) { Elm_Object_Item *eo = EO_OBJ(it); Evas_Object *obj; if (efl_invalidated_get(eo)) return ; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); // if (it->base->disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) // return; efl_ref(eo); _elm_list_walk(obj, sd); if (sd->focus_on_selection_enabled) { if (it->icon) elm_object_focus_set(it->icon, EINA_FALSE); if (it->end) elm_object_focus_set(it->end, EINA_FALSE); } if (it->selected) { it->selected = EINA_FALSE; sd->selected = eina_list_remove(sd->selected, EO_OBJ(it)); if (!(it->base->disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE))) efl_event_callback_legacy_call (WIDGET(it), EFL_UI_EVENT_UNSELECTED, EO_OBJ(it)); if (_elm_config->atspi_mode) efl_access_state_changed_signal_emit(EO_OBJ(it), EFL_ACCESS_STATE_TYPE_SELECTED, EINA_FALSE); } _elm_list_unwalk(obj, sd); efl_unref(eo); } static void _process_item_unselected_set(void *data, Elm_Object_Item *sel, Elm_List_Item_Data *it) { if (sel == data) return ; _item_unhighlight(it); _item_unselect(it); } static Eina_Bool _swipe_cancel(void *data) { Elm_List_Item_Data *it = data; ELM_LIST_ITEM_CHECK_OR_RETURN(it, ECORE_CALLBACK_CANCEL); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); sd->swipe = EINA_FALSE; sd->movements = 0; return ECORE_CALLBACK_RENEW; } static void _edge_left_cb(Evas_Object *obj, void *data EINA_UNUSED) { efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_EDGE_LEFT, NULL); } static void _edge_right_cb(Evas_Object *obj, void *data EINA_UNUSED) { efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_EDGE_RIGHT, NULL); } static void _edge_top_cb(Evas_Object *obj, void *data EINA_UNUSED) { efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_EDGE_TOP, NULL); } static void _edge_bottom_cb(Evas_Object *obj, void *data EINA_UNUSED) { efl_event_callback_legacy_call(obj, ELM_LIST_EVENT_EDGE_BOTTOM, NULL); } static Eina_Bool _long_press_cb(void *data) { Elm_List_Item_Data *it = data; Evas_Object *obj; ELM_LIST_ITEM_CHECK_OR_RETURN(it, ECORE_CALLBACK_CANCEL); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); it->long_timer = NULL; if (it->base->disabled) goto end; sd->longpressed = EINA_TRUE; efl_event_callback_legacy_call (WIDGET(it), EFL_UI_EVENT_LONGPRESSED, EO_OBJ(it)); end: return ECORE_CALLBACK_CANCEL; } static void _swipe_do(Elm_List_Item_Data *it) { int i, sum = 0; ELM_LIST_ITEM_CHECK_OR_RETURN(it); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); sd->swipe = EINA_FALSE; for (i = 0; i < sd->movements; i++) { sum += sd->history[i].x; if (abs(sd->history[0].y - sd->history[i].y) > 10) return; } sum /= sd->movements; if (abs(sum - sd->history[0].x) <= 10) return; efl_event_callback_legacy_call (WIDGET(it), ELM_LIST_EVENT_SWIPE, EO_OBJ(it)); } static void _mouse_in_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { Elm_List_Item_Data *it = data; if (!elm_object_item_disabled_get(EO_OBJ(it)) && (_elm_config->focus_move_policy == ELM_FOCUS_MOVE_POLICY_IN)) elm_object_item_focus_set(EO_OBJ(it), EINA_TRUE); } static void _mouse_move_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *o, void *event_info) { Evas_Object *obj; Elm_List_Item_Data *it = data; Evas_Event_Mouse_Move *ev = event_info; Evas_Coord x = 0, y = 0, w = 0, h = 0; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); efl_ref(EO_OBJ(it)); _elm_list_walk(obj, sd); evas_object_geometry_get(o, &x, &y, &w, &h); if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) { if (!sd->on_hold) { sd->on_hold = EINA_TRUE; ELM_SAFE_FREE(it->long_timer, ecore_timer_del); if (!sd->was_selected) { _item_unhighlight(it); _item_unselect(it); } } } else if (sd->mouse_down && ELM_RECTS_POINT_OUT(x, y, w, h, ev->cur.canvas.x, ev->cur.canvas.y)) { ELM_SAFE_FREE(it->long_timer, ecore_timer_del); if (!sd->was_selected) { _item_unhighlight(it); _item_unselect(it); } it->base->still_in = EINA_FALSE; } if (sd->movements == ELM_LIST_SWIPE_MOVES) { sd->swipe = EINA_TRUE; } else { sd->history[sd->movements].x = ev->cur.canvas.x; sd->history[sd->movements].y = ev->cur.canvas.y; if (abs((sd->history[sd->movements].x - sd->history[0].x)) > 40) { sd->swipe = EINA_TRUE; } else sd->movements++; } if (sd->swipe) ELM_SAFE_FREE(it->long_timer, ecore_timer_del); _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _mouse_down_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *event_info) { Evas_Event_Mouse_Down *ev = event_info; Elm_List_Item_Data *it = data; Evas_Object *obj; Evas_Coord x, y; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if (ev->button == 3) { evas_object_geometry_get(obj, &x, &y, NULL, NULL); sd->dx = ev->canvas.x - x; sd->dy = ev->canvas.y - y; return; } if (ev->button != 1) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) sd->on_hold = EINA_TRUE; else sd->on_hold = EINA_FALSE; if (sd->on_hold) return; sd->mouse_down = EINA_TRUE; sd->was_selected = it->selected; efl_ref(EO_OBJ(it)); _elm_list_walk(obj, sd); _item_highlight(it); sd->longpressed = EINA_FALSE; ecore_timer_del(it->long_timer); it->long_timer = ecore_timer_add (_elm_config->longpress_timeout, _long_press_cb, it); ecore_timer_del(it->swipe_timer); it->swipe_timer = ecore_timer_add(ELM_LIST_SWIPE_TIME, _swipe_cancel, it); /* Always call the callbacks last - the user may delete our context! */ if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) { efl_event_callback_legacy_call (WIDGET(it), EFL_UI_EVENT_CLICKED_DOUBLE, EO_OBJ(it)); efl_event_callback_legacy_call (WIDGET(it), ELM_LIST_EVENT_ACTIVATED, EO_OBJ(it)); } sd->swipe = EINA_FALSE; sd->movements = 0; it->base->still_in = EINA_TRUE; _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _mouse_up_cb(void *data, Evas *evas EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *event_info) { Evas_Object *obj; Elm_List_Item_Data *it = data; Evas_Event_Mouse_Up *ev = event_info; Evas_Coord x, y, dx, dy; ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if (ev->button == 3) { evas_object_geometry_get(obj, &x, &y, NULL, NULL); dx = sd->dx - (ev->canvas.x - x); dy = sd->dy - (ev->canvas.y - y); if (dx < 0) dx = -dx; if (dy < 0) dy = -dy; if ((dx < 5) && (dy < 5)) efl_event_callback_legacy_call (obj, EFL_UI_EVENT_CLICKED_RIGHT, EO_OBJ(it)); return; } if (ev->button != 1) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) sd->on_hold = EINA_TRUE; else sd->on_hold = EINA_FALSE; sd->mouse_down = EINA_FALSE; ELM_SAFE_FREE(it->long_timer, ecore_timer_del); ELM_SAFE_FREE(it->swipe_timer, ecore_timer_del); if (sd->swipe) { if (!sd->was_selected) { _item_unhighlight(it); _item_unselect(it); } _swipe_do(data); sd->swipe = EINA_FALSE; sd->was_selected = EINA_FALSE; return; } if (sd->longpressed) { if (!sd->was_selected) { _item_unhighlight(it); _item_unselect(it); } sd->longpressed = EINA_FALSE; sd->was_selected = EINA_FALSE; return; } if (it->base->disabled) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD || !it->base->still_in) return; efl_ref(EO_OBJ(it)); _elm_list_walk(obj, sd); if (sd->focused_item != EO_OBJ(it)) elm_object_item_focus_set(EO_OBJ(it), EINA_TRUE); if (sd->multi && ((sd->multi_select_mode != ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL) || (evas_key_modifier_is_set(ev->modifiers, "Control")))) { if (!it->selected) { _item_highlight(it); _item_select(it); } else { _item_unhighlight(it); _item_unselect(it); } } else { _items_safe_process(sd->selected, _process_item_unselected_set, EO_OBJ(it)); _item_highlight(it); _item_select(it); } _elm_list_unwalk(obj, sd); efl_unref(EO_OBJ(it)); } static void _elm_list_looping_left_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { Evas_Object *list = data; ELM_LIST_DATA_GET(list, sd); Elm_Object_Item *it = elm_list_last_item_get(list); if (!_elm_config->item_select_on_focus_disable) elm_list_item_selected_set(it, EINA_TRUE); else elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,left,end", "elm"); sd->item_looping_on = EINA_FALSE; } static void _elm_list_looping_right_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { Evas_Object *list = data; ELM_LIST_DATA_GET(list, sd); Elm_Object_Item *it = elm_list_first_item_get(list); if (!_elm_config->item_select_on_focus_disable) elm_list_item_selected_set(it, EINA_TRUE); else elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,right,end", "elm"); sd->item_looping_on = EINA_FALSE; } static void _elm_list_looping_up_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { Evas_Object *list = data; ELM_LIST_DATA_GET(list, sd); Elm_Object_Item *it = elm_list_last_item_get(list); if (!_elm_config->item_select_on_focus_disable) elm_list_item_selected_set(it, EINA_TRUE); else elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,up,end", "elm"); sd->item_looping_on = EINA_FALSE; } static void _elm_list_looping_down_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { Evas_Object *list = data; ELM_LIST_DATA_GET(list, sd); Elm_Object_Item *it = elm_list_first_item_get(list); if (!_elm_config->item_select_on_focus_disable) elm_list_item_selected_set(it, EINA_TRUE); else elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,down,end", "elm"); sd->item_looping_on = EINA_FALSE; } EOLIAN static void _elm_list_item_elm_widget_item_disable(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { _item_unhighlight(item); _item_unselect(item); if (item->base->disabled) edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm"); else edje_object_signal_emit(VIEW(item), "elm,state,enabled", "elm"); } EOLIAN static void _elm_list_item_elm_widget_item_part_content_set(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item, const char *part, Evas_Object *content) { Evas_Object **icon_p = NULL; Eina_Bool dummy = EINA_FALSE; if ((!part) || (!strcmp(part, "start"))) { icon_p = &(item->icon); dummy = item->dummy_icon; if (!content) item->dummy_icon = EINA_TRUE; else item->dummy_icon = EINA_FALSE; } else if (!strcmp(part, "end")) { icon_p = &(item->end); dummy = item->dummy_end; if (!content) item->dummy_end = EINA_TRUE; else item->dummy_end = EINA_FALSE; } else return; if (content == *icon_p) return; if ((dummy) && (!content)) return; if (dummy) evas_object_del(*icon_p); if (!content) { content = evas_object_rectangle_add(evas_object_evas_get(WIDGET(item))); evas_object_color_set(content, 0, 0, 0, 0); } evas_object_del(*icon_p); *icon_p = content; if (VIEW(item)) { if ((!part) || !strcmp(part, "start")) edje_object_part_swallow(VIEW(item), "elm.swallow.icon", content); else edje_object_part_swallow(VIEW(item), "elm.swallow.end", content); } } EOLIAN static Evas_Object * _elm_list_item_elm_widget_item_part_content_get(const Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item, const char *part) { if ((!part) || (!strcmp(part, "start"))) { if (item->dummy_icon) return NULL; return item->icon; } else if (!strcmp(part, "end")) { if (item->dummy_end) return NULL; return item->end; } return NULL; } EOLIAN static Evas_Object * _elm_list_item_elm_widget_item_part_content_unset(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *item, const char *part) { if ((!part) || (!strcmp(part, "start"))) { Evas_Object *obj = item->icon; elm_wdg_item_part_content_set(eo_it, part, NULL); return obj; } else if (!strcmp(part, "end")) { Evas_Object *obj = item->end; elm_wdg_item_part_content_set(eo_it, part, NULL); return obj; } return NULL; } EOLIAN static void _elm_list_item_elm_widget_item_part_text_set(Eo *eo_list_it, Elm_List_Item_Data *list_it, const char *part, const char *text) { if (part && strcmp(part, "default")) { elm_wdg_item_part_text_custom_set(eo_list_it, part, text); edje_object_part_text_escaped_set(VIEW(list_it), part, text); return; } if (!eina_stringshare_replace(&list_it->label, text)) return; if (VIEW(list_it)) edje_object_part_text_escaped_set(VIEW(list_it), "elm.text", text); } EOLIAN static const char * _elm_list_item_elm_widget_item_part_text_get(const Eo *eo_it, Elm_List_Item_Data *it, const char *part) { if (part && strcmp(part, "default")) return elm_wdg_item_part_text_custom_get(eo_it, part); return it->label; } /* FIXME: this _item_del_pre_hook is called stupidly! To fix this, 1. it->walking concept should be adopted. 2. elm_widget_item_del() should be called instead of the combination of _elm_list_item_free() + elm_widget_item_free() */ EOLIAN static void _elm_list_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { Evas_Object *obj = WIDGET(item); ELM_LIST_DATA_GET(obj, sd); if (item->selected) { _item_unhighlight(item); _item_unselect(item); } item->deleted = EINA_TRUE; sd->items = eina_list_remove_list(sd->items, item->node); item->node = NULL; } EOLIAN static void _elm_list_item_elm_widget_item_signal_emit(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it, const char *emission, const char *source) { edje_object_signal_emit(VIEW(it), emission, source); } EOLIAN static void _elm_list_item_elm_widget_item_item_focus_set(Eo *eo_it, Elm_List_Item_Data *it, Eina_Bool focused) { Evas_Object *obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if (focused) { sd->last_focused_item = eo_it; if (!elm_object_focus_get(obj)) elm_object_focus_set(obj, EINA_TRUE); if (!elm_object_focus_get(obj)) return; if (eo_it != sd->focused_item) { if (sd->focused_item) _elm_list_item_unfocused(sd->focused_item); _elm_list_item_focused(eo_it); } } else { if (!elm_object_focus_get(obj)) return; if (eo_it) _elm_list_item_unfocused(eo_it); } _elm_widget_focus_highlight_start(obj); } EOLIAN static Eina_Bool _elm_list_item_elm_widget_item_item_focus_get(const Eo *eo_it, Elm_List_Item_Data *it) { ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); Evas_Object *obj = WIDGET(it); ELM_LIST_CHECK(obj) EINA_FALSE; ELM_LIST_DATA_GET(obj, sd); if (eo_it == sd->focused_item) return EINA_TRUE; return EINA_FALSE; } EOLIAN static Efl_Access_State_Set _elm_list_item_efl_access_object_state_set_get(const Eo *eo_it, Elm_List_Item_Data *data EINA_UNUSED) { Efl_Access_State_Set ret; Eina_Bool sel; ret = efl_access_object_state_set_get(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); if (elm_object_item_disabled_get(eo_it)) return ret; STATE_TYPE_SET(ret, EFL_ACCESS_STATE_TYPE_SELECTABLE); sel = elm_obj_list_item_selected_get(eo_it); if (sel) STATE_TYPE_SET(ret, EFL_ACCESS_STATE_TYPE_SELECTED); else STATE_TYPE_UNSET(ret, EFL_ACCESS_STATE_TYPE_SELECTED); return ret; } EOLIAN static const char* _elm_list_item_efl_access_object_i18n_name_get(const Eo *eo_it, Elm_List_Item_Data *data) { const char *ret; ret = efl_access_object_i18n_name_get(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); if (ret) return ret; return _elm_widget_item_accessible_plain_name_get(eo_it, data->label); } static char * _access_info_cb(void *data, Evas_Object *obj EINA_UNUSED) { Elm_List_Item_Data *it = (Elm_List_Item_Data *)data; const char *txt = NULL; if (!it) return NULL; if (!txt) txt = it->label; if (txt) return strdup(txt); return NULL; } static char * _access_state_cb(void *data, Evas_Object *obj EINA_UNUSED) { Elm_List_Item_Data *it = (Elm_List_Item_Data *)data; if (!it) return NULL; if (it->base->disabled) return strdup(E_("State: Disabled")); return NULL; } static void _access_on_highlight_cb(void *data) { Elm_Object_Item *it = data; if (!it) return; elm_list_item_bring_in(it); } static void _access_activate_cb(void *data EINA_UNUSED, Evas_Object *part_obj EINA_UNUSED, Elm_Object_Item *eo_it) { Evas_Object *obj; ELM_LIST_ITEM_DATA_GET(eo_it, it); ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); efl_ref(eo_it); _elm_list_walk(obj, sd); if (sd->multi) { if (!it->selected) { _item_highlight(it); _item_select(it); } else { _item_unhighlight(it); _item_unselect(it); } } else { _items_safe_process(sd->selected, _process_item_unselected_set, eo_it); _item_highlight(it); _item_select(it); } _elm_list_unwalk(obj, sd); efl_unref(eo_it); } static void _access_widget_item_register(Elm_List_Item_Data *it, Eina_Bool is_access) { Elm_Access_Info *ai; if (!is_access) _elm_access_widget_item_unregister(it->base); else { _elm_access_widget_item_register(it->base); ai = _elm_access_info_get(it->base->access_obj); _elm_access_callback_set(ai, ELM_ACCESS_INFO, _access_info_cb, it); _elm_access_callback_set(ai, ELM_ACCESS_STATE, _access_state_cb, it); _elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, EO_OBJ(it)); _elm_access_activate_callback_set(ai, _access_activate_cb, EO_OBJ(it)); } } EOLIAN static Eo * _elm_list_item_efl_object_constructor(Eo *eo_it, Elm_List_Item_Data *it) { eo_it = efl_constructor(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); it->base = efl_data_scope_get(eo_it, ELM_WIDGET_ITEM_CLASS); efl_access_object_role_set(eo_it, EFL_ACCESS_ROLE_LIST_ITEM); return eo_it; } static Elm_List_Item_Data * _item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { Eo *eo_it = efl_add(ELM_LIST_ITEM_CLASS, obj); if (!eo_it) return NULL; ELM_LIST_ITEM_DATA_GET(eo_it, it); it->label = eina_stringshare_add(label); it->icon = icon; it->end = end; it->func = func; WIDGET_ITEM_DATA_SET(EO_OBJ(it), data); VIEW_SET(it, edje_object_add(evas_object_evas_get(obj))); edje_object_update_hints_set(VIEW(it), 1); if (it->icon) efl_parent_set(it->icon, eo_it); if (it->end) efl_parent_set(it->end, eo_it); /* access */ if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) _access_widget_item_register(it, EINA_TRUE); edje_object_mirrored_set(VIEW(it), efl_ui_mirrored_get(obj)); evas_object_event_callback_add (VIEW(it), EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, it); evas_object_event_callback_add (VIEW(it), EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, it); evas_object_event_callback_add (VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, it); evas_object_event_callback_add (VIEW(it), EVAS_CALLBACK_MOUSE_IN, _mouse_in_cb, it); evas_object_size_hint_weight_set (VIEW(it), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(VIEW(it), EVAS_HINT_FILL, EVAS_HINT_FILL); edje_object_mirrored_set(VIEW(it), efl_ui_mirrored_get(obj)); if (it->icon) { elm_widget_sub_object_add(obj, it->icon); evas_object_event_callback_add (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); efl_access_object_access_type_set(it->icon, EFL_ACCESS_TYPE_DISABLED); elm_widget_tree_unfocusable_set(it->icon, EINA_TRUE); } if (it->end) { elm_widget_sub_object_add(obj, it->end); evas_object_event_callback_add (it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); efl_access_object_access_type_set(it->end, EFL_ACCESS_TYPE_DISABLED); elm_widget_tree_unfocusable_set(it->end, EINA_TRUE); } if (_elm_config->atspi_mode) efl_access_added(eo_it); return it; } static void _resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { elm_layout_sizing_eval(data); } static Eina_Bool _elm_list_smart_focus_next_enable = EINA_FALSE; EOLIAN static void _elm_list_efl_canvas_group_group_add(Eo *obj, Elm_List_Data *priv) { Evas_Coord minw, minh; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); efl_canvas_group_add(efl_super(obj, MY_CLASS)); elm_widget_sub_object_parent_add(obj); elm_widget_can_focus_set(obj, EINA_TRUE); priv->mode = ELM_LIST_SCROLL; if (!elm_layout_theme_set(obj, "list", "base", elm_widget_style_get(obj))) CRI("Failed to set layout!"); priv->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj)); evas_object_data_set(priv->hit_rect, "_elm_leaveme", obj); evas_object_smart_member_add(priv->hit_rect, obj); elm_widget_sub_object_add(obj, priv->hit_rect); /* common scroller hit rectangle setup */ evas_object_color_set(priv->hit_rect, 0, 0, 0, 0); evas_object_show(priv->hit_rect); evas_object_repeat_events_set(priv->hit_rect, EINA_TRUE); elm_interface_scrollable_edge_left_cb_set(obj, _edge_left_cb); elm_interface_scrollable_edge_right_cb_set(obj, _edge_right_cb); elm_interface_scrollable_edge_top_cb_set(obj, _edge_top_cb); elm_interface_scrollable_edge_bottom_cb_set(obj, _edge_bottom_cb); elm_interface_scrollable_content_min_limit_cb_set(obj, _elm_list_content_min_limit_cb); elm_interface_scrollable_objects_set(obj, wd->resize_obj, priv->hit_rect); /* the scrollable interface may set this */ evas_object_event_callback_add (wd->resize_obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); edje_object_size_min_calc (wd->resize_obj, &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize_cb, obj); elm_interface_scrollable_bounce_allow_set(obj, EINA_FALSE, _elm_config->thumbscroll_bounce_enable); priv->box = elm_box_add(obj); evas_object_size_hint_weight_set(priv->box, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(priv->box, EVAS_HINT_FILL, 0.0); efl_access_object_access_type_set(priv->box, EFL_ACCESS_TYPE_DISABLED); /* FIXME: change this ugly code path later */ elm_widget_on_show_region_hook_set(priv->box, obj, _show_region_hook, NULL); elm_widget_sub_object_add(obj, priv->box); elm_interface_scrollable_content_set(obj, priv->box); evas_object_event_callback_add (priv->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); edje_object_signal_callback_add(wd->resize_obj, "elm,looping,left,done", "elm", _elm_list_looping_left_cb, obj); edje_object_signal_callback_add(wd->resize_obj, "elm,looping,right,done", "elm", _elm_list_looping_right_cb, obj); edje_object_signal_callback_add(wd->resize_obj, "elm,looping,up,done", "elm", _elm_list_looping_up_cb, obj); edje_object_signal_callback_add(wd->resize_obj, "elm,looping,down,done", "elm", _elm_list_looping_down_cb, obj); } EOLIAN static void _elm_list_efl_canvas_group_group_del(Eo *obj, Elm_List_Data *sd) { const Eina_List *l; Elm_Object_Item *eo_it; sd->delete_me = EINA_TRUE; EINA_LIST_FOREACH(sd->items, l, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); if (it->icon) evas_object_event_callback_del (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb); if (it->end) evas_object_event_callback_del (it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb); } evas_object_event_callback_del (obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb); evas_object_event_callback_del (sd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb); while (sd->items) /* will be removed from list in _elm_list_item_elm_widget_item_del_pre */ efl_del(eina_list_data_get(sd->items)); sd->selected = eina_list_free(sd->selected); efl_canvas_group_del(efl_super(obj, MY_CLASS)); } EOLIAN static void _elm_list_efl_gfx_entity_position_set(Eo *obj, Elm_List_Data *sd, Eina_Position2D pos) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) return; efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos); efl_gfx_entity_position_set(sd->hit_rect, pos); } EOLIAN static void _elm_list_efl_gfx_entity_size_set(Eo *obj, Elm_List_Data *sd, Eina_Size2D sz) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) return; efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz); efl_gfx_entity_size_set(sd->hit_rect, sz); } EOLIAN static void _elm_list_efl_canvas_group_group_member_add(Eo *obj, Elm_List_Data *sd, Evas_Object *member) { efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member); if (sd->hit_rect) evas_object_raise(sd->hit_rect); } EOLIAN static void _elm_list_efl_ui_widget_on_access_update(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Eina_Bool acs) { Eina_List *elist = NULL; Elm_Object_Item *eo_it; _elm_list_smart_focus_next_enable = acs; EINA_LIST_FOREACH(sd->items, elist, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); _access_widget_item_register(it, _elm_list_smart_focus_next_enable); } } EAPI Evas_Object * elm_list_add(Evas_Object *parent) { EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); return elm_legacy_add(MY_CLASS, parent); } EOLIAN static Eo * _elm_list_efl_object_constructor(Eo *obj, Elm_List_Data *sd EINA_UNUSED) { obj = efl_constructor(efl_super(obj, MY_CLASS)); efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); efl_access_object_role_set(obj, EFL_ACCESS_ROLE_LIST); legacy_efl_ui_focus_manager_widget_legacy_signals(obj, obj); return obj; } EOLIAN static void _elm_list_go(Eo *obj, Elm_List_Data *sd EINA_UNUSED) { _items_fix(obj); } EOLIAN static void _elm_list_multi_select_set(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Eina_Bool multi) { sd->multi = multi; } EOLIAN static Eina_Bool _elm_list_multi_select_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->multi; } EOLIAN static void _elm_list_multi_select_mode_set(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Elm_Object_Multi_Select_Mode mode) { if (mode >= ELM_OBJECT_MULTI_SELECT_MODE_MAX) return; if (sd->multi_select_mode != mode) sd->multi_select_mode = mode; } EOLIAN static Elm_Object_Multi_Select_Mode _elm_list_multi_select_mode_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->multi_select_mode; } EOLIAN static void _elm_list_mode_set(Eo *obj, Elm_List_Data *sd, Elm_List_Mode mode) { Elm_Object_Item *eo_it; Eina_List *n; if (sd->mode == mode) return; sd->mode = mode; _elm_list_mode_set_internal(obj); EINA_LIST_FOREACH(sd->items, n, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); it->fixed = EINA_FALSE; } _items_fix(obj); } EOLIAN static Elm_List_Mode _elm_list_mode_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->mode; } EOLIAN static void _elm_list_horizontal_set(Eo *obj, Elm_List_Data *sd, Eina_Bool horizontal) { Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable; horizontal = !!horizontal; if (sd->h_mode == horizontal) return; sd->h_mode = horizontal; elm_box_horizontal_set(sd->box, horizontal); if (horizontal) { evas_object_size_hint_weight_set(sd->box, 0.0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(sd->box, 0.0, EVAS_HINT_FILL); elm_interface_scrollable_bounce_allow_set(obj, bounce, EINA_FALSE); } else { evas_object_size_hint_weight_set(sd->box, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(sd->box, EVAS_HINT_FILL, 0.0); elm_interface_scrollable_bounce_allow_set(obj, EINA_FALSE, bounce); } } EOLIAN static Eina_Bool _elm_list_horizontal_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->h_mode; } EOLIAN static void _elm_list_select_mode_set(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Elm_Object_Select_Mode mode) { if (mode >= ELM_OBJECT_SELECT_MODE_MAX) return; if (sd->select_mode != mode) sd->select_mode = mode; } EOLIAN static Elm_Object_Select_Mode _elm_list_select_mode_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->select_mode; } EAPI void elm_list_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) { ELM_LIST_CHECK(obj); elm_interface_scrollable_bounce_allow_set(obj, h_bounce, v_bounce); } EAPI void elm_list_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) { ELM_LIST_CHECK(obj); elm_interface_scrollable_bounce_allow_get((Eo *) obj, h_bounce, v_bounce); } EAPI void elm_list_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) { ELM_LIST_CHECK(obj); elm_interface_scrollable_policy_set(obj, policy_h, policy_v); } EOLIAN static void _elm_list_elm_interface_scrollable_policy_set(Eo *obj, Elm_List_Data *sd EINA_UNUSED, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) { if ((policy_h >= ELM_SCROLLER_POLICY_LAST) || (policy_v >= ELM_SCROLLER_POLICY_LAST)) return; elm_interface_scrollable_policy_set(efl_super(obj, MY_CLASS), policy_h, policy_v); } EAPI void elm_list_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) { ELM_LIST_CHECK(obj); elm_interface_scrollable_policy_get((Eo *) obj, policy_h, policy_v); } static void _item_clear(void *data EINA_UNUSED, Elm_Object_Item *eo, Elm_List_Item_Data *it EINA_UNUSED) { efl_del(eo); } EOLIAN static void _elm_list_clear(Eo *obj, Elm_List_Data *sd) { if (!sd->items) return; sd->selected = eina_list_free(sd->selected); _items_safe_process(sd->items, _item_clear, NULL); _items_fix(obj); elm_layout_sizing_eval(obj); } EOLIAN static const Eina_List* _elm_list_items_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->items; } EOLIAN static Elm_Object_Item* _elm_list_selected_item_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { if (sd->selected) return sd->selected->data; else return NULL; } EOLIAN static const Eina_List* _elm_list_selected_items_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->selected; } EOLIAN static Elm_Object_Item* _elm_list_item_append(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); sd->items = eina_list_append(sd->items, EO_OBJ(it)); it->node = eina_list_last(sd->items); elm_box_pack_end(sd->box, VIEW(it)); if (_elm_config->atspi_mode) efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it)); return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_prepend(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); sd->items = eina_list_prepend(sd->items, EO_OBJ(it)); it->node = sd->items; elm_box_pack_start(sd->box, VIEW(it)); if (_elm_config->atspi_mode) efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it)); return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_insert_before(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { Elm_List_Item_Data *it; EINA_SAFETY_ON_NULL_RETURN_VAL(eo_before, NULL); ELM_LIST_ITEM_DATA_GET(eo_before, before_it); ELM_LIST_ITEM_CHECK_OR_RETURN(before_it, NULL); if (!before_it->node) return NULL; it = _item_new(obj, label, icon, end, func, data); sd->items = eina_list_prepend_relative_list(sd->items, EO_OBJ(it), before_it->node); it->node = before_it->node->prev; elm_box_pack_before(sd->box, VIEW(it), VIEW(before_it)); if (_elm_config->atspi_mode) efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it)); return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_insert_after(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { Elm_List_Item_Data *it; EINA_SAFETY_ON_NULL_RETURN_VAL(eo_after, NULL); ELM_LIST_ITEM_DATA_GET(eo_after, after_it); ELM_LIST_ITEM_CHECK_OR_RETURN(after_it, NULL); if (!after_it->node) return NULL; it = _item_new(obj, label, icon, end, func, data); sd->items = eina_list_append_relative_list(sd->items, EO_OBJ(it), after_it->node); it->node = after_it->node->next; elm_box_pack_after(sd->box, VIEW(it), VIEW(after_it)); if (_elm_config->atspi_mode) efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it)); return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_sorted_insert(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func) { Eina_List *l; Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); sd->items = eina_list_sorted_insert(sd->items, cmp_func, EO_OBJ(it)); l = eina_list_data_find_list(sd->items, EO_OBJ(it)); l = eina_list_next(l); if (!l) { it->node = eina_list_last(sd->items); elm_box_pack_end(sd->box, VIEW(it)); } else { Elm_Object_Item *eo_before = eina_list_data_get(l); ELM_LIST_ITEM_DATA_GET(eo_before, before); it->node = before->node->prev; elm_box_pack_before(sd->box, VIEW(it), VIEW(before)); } if (_elm_config->atspi_mode) efl_access_children_changed_added_signal_emit(obj, EO_OBJ(it)); return EO_OBJ(it); } EOLIAN static void _elm_list_item_separator_set(Eo *eo_item, Elm_List_Item_Data *it, Eina_Bool setting) { ELM_LIST_ITEM_CHECK_OR_RETURN(it); it->is_separator = !!setting; if (it->is_separator) efl_access_object_role_set(eo_item, EFL_ACCESS_ROLE_SEPARATOR); else efl_access_object_role_set(eo_item, EFL_ACCESS_ROLE_LIST_ITEM); } EOLIAN static Eina_Bool _elm_list_item_separator_get(const Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *it) { ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); return it->is_separator; } EOLIAN static void _elm_list_item_selected_set(Eo *eo_item, Elm_List_Item_Data *item, Eina_Bool selected) { Evas_Object *obj; ELM_LIST_ITEM_CHECK_OR_RETURN(item); obj = WIDGET(item); ELM_LIST_DATA_GET(obj, sd); selected = !!selected; if (item->selected == selected) return; efl_ref(eo_item); _elm_list_walk(obj, sd); if (selected) { if (!sd->multi) _items_safe_process(sd->selected, _process_item_unselected_set, NULL); _item_highlight(item); elm_object_item_focus_set(EO_OBJ(item), EINA_TRUE); _item_select(item); } else { _process_item_unselected_set(NULL, eo_item, item); } _elm_list_unwalk(obj, sd); efl_unref(eo_item); } EOLIAN static Eina_Bool _elm_list_item_selected_get(const Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *it) { ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); return it->selected; } EOLIAN static void _elm_list_item_show(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) { Evas_Coord bx, by, bw, bh; Evas_Coord x, y, w, h; ELM_LIST_ITEM_CHECK_OR_RETURN(it); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); evas_smart_objects_calculate(evas_object_evas_get(sd->box)); evas_object_geometry_get(sd->box, &bx, &by, &bw, &bh); evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); x -= bx; y -= by; elm_interface_scrollable_content_region_show(WIDGET(it), x, y, w, h); } EOLIAN static void _elm_list_item_bring_in(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) { Evas_Coord bx, by, bw, bh; Evas_Coord x, y, w, h; ELM_LIST_ITEM_CHECK_OR_RETURN(it); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); evas_smart_objects_calculate(evas_object_evas_get(sd->box)); evas_object_geometry_get(sd->box, &bx, &by, &bw, &bh); evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); x -= bx; y -= by; elm_interface_scrollable_region_bring_in(WIDGET(it), x, y, w, h); } EOLIAN static Evas_Object * _elm_list_item_object_get(const Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) { ELM_LIST_ITEM_CHECK_OR_RETURN(it, NULL); return VIEW(it); } EOLIAN static Elm_Object_Item * _elm_list_item_prev_get(const Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { if (item->node->prev) return item->node->prev->data; return NULL; } EOLIAN static Elm_Object_Item * _elm_list_item_next_get(const Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { if (item->node->next) return item->node->next->data; return NULL; } EOLIAN static Elm_Object_Item* _elm_list_first_item_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { if (!sd->items) return NULL; else return eina_list_data_get(sd->items); return NULL; } EOLIAN static Elm_Object_Item* _elm_list_last_item_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { if (!sd->items) return NULL; else return eina_list_data_get(eina_list_last(sd->items)); return NULL; } EOLIAN static Elm_Object_Item* _elm_list_at_xy_item_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd, Evas_Coord x, Evas_Coord y, int *posret) { Eina_List *l; Elm_Object_Item *eo_it; Evas_Coord lasty; evas_object_geometry_get(sd->hit_rect, &lasty, NULL, NULL, NULL); EINA_LIST_FOREACH(sd->items, l, eo_it) { ELM_LIST_ITEM_DATA_GET(eo_it, it); Evas_Coord itx, ity; Evas_Object *vit = VIEW(it); Evas_Coord vx, vy, vw, vh; evas_object_geometry_get(vit, &vx, &vy, &vw, &vh); itx = vx; ity = vy; if (ELM_RECTS_INTERSECT (itx, ity, vw, vh, x, y, 1, 1)) { if (posret) { if (y <= (ity + (vh / 4))) *posret = -1; else if (y >= (ity + vh - (vh / 4))) *posret = 1; else *posret = 0; } return EO_OBJ(it); } lasty = ity + vh; } if (posret) { if (y > lasty) *posret = 1; else *posret = -1; } return NULL; } EOLIAN static void _elm_list_focus_on_selection_set(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Eina_Bool enabled) { sd->focus_on_selection_enabled = !!enabled; } EOLIAN static Eina_Bool _elm_list_focus_on_selection_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->focus_on_selection_enabled; } static Eina_Rect _elm_list_item_coordinates_adjust(Elm_List_Item_Data *it) { Evas_Coord ix, iy, iw, ih, vx, vy, vw, vh; elm_interface_scrollable_content_viewport_geometry_get(WIDGET(it), &vx, &vy, &vw, &vh); evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih); if (iy < vy) iy = vy; if ((iy + ih) > (vy + vh)) ih = (vy + vh - iy); if (ix < vx) ix = vx; if ((ix + iw) > (vx + vw)) iw = (vx + vw - ix); return EINA_RECT(ix, iy, iw, ih); } EOLIAN static Eina_Rect _elm_list_efl_ui_widget_focus_highlight_geometry_get(const Eo *obj, Elm_List_Data *sd) { Eina_Rect r = {}; if (sd->focused_item) { ELM_LIST_ITEM_DATA_GET(sd->focused_item, focus_it); r = _elm_list_item_coordinates_adjust(focus_it); elm_widget_focus_highlight_focus_part_geometry_get(VIEW(focus_it), &r.x, &r.y, &r.w, &r.h); } else { r = efl_gfx_entity_geometry_get(obj); } return r; } EOLIAN static Elm_Object_Item* _elm_list_elm_widget_item_container_focused_item_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->focused_item; } EOLIAN static void _elm_list_elm_interface_scrollable_item_loop_enabled_set(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Eina_Bool enable) { sd->item_loop_enable = !!enable; } EOLIAN static Eina_Bool _elm_list_elm_interface_scrollable_item_loop_enabled_get(const Eo *obj EINA_UNUSED, Elm_List_Data *sd) { return sd->item_loop_enable; } static void _elm_list_class_constructor(Efl_Class *klass) { if (_elm_config->access_mode) _elm_list_smart_focus_next_enable = EINA_TRUE; evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } EOLIAN const Efl_Access_Action_Data * _elm_list_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Elm_List_Data *pd EINA_UNUSED) { static Efl_Access_Action_Data atspi_actions[] = { { "move,prior", "move", "prior", _key_action_move}, { "move,next", "move", "next", _key_action_move}, { "move,left", "move", "left", _key_action_move}, { "move,left,multi", "move", "left_multi", _key_action_move}, { "move,right", "move", "right", _key_action_move}, { "move,right,multi", "move", "right_multi", _key_action_move}, { "move,up", "move", "up", _key_action_move}, { "move,up,multi", "move", "up_multi", _key_action_move}, { "move,down", "move", "down", _key_action_move}, { "move,down,multi", "move", "down_multi", _key_action_move}, { "move,first", "move", "first", _key_action_move}, { "move,last", "move", "last", _key_action_move}, { "select", "select", NULL, _key_action_select}, { "escape", "escape", NULL, _key_action_escape}, { NULL, NULL, NULL, NULL } }; return &atspi_actions[0]; } EOLIAN Eina_List* _elm_list_efl_access_object_access_children_get(const Eo *obj, Elm_List_Data *pd) { Eina_List *ret; ret = efl_access_object_access_children_get(efl_super(obj, ELM_LIST_CLASS)); return eina_list_merge(eina_list_clone(pd->items), ret); } EOLIAN int _elm_list_efl_access_selection_selected_children_count_get(const Eo *objm EINA_UNUSED, Elm_List_Data *pd) { return eina_list_count(pd->selected); } EOLIAN Eo* _elm_list_efl_access_selection_selected_child_get(const Eo *obj EINA_UNUSED, Elm_List_Data *pd, int child_idx) { return eina_list_nth(pd->selected, child_idx); } EOLIAN Eina_Bool _elm_list_efl_access_selection_child_select(Eo *obj EINA_UNUSED, Elm_List_Data *pd, int child_index) { if (pd->select_mode != ELM_OBJECT_SELECT_MODE_NONE) { Eo *item = eina_list_nth(pd->items, child_index); if (item) elm_list_item_selected_set(item, EINA_TRUE); return EINA_TRUE; } return EINA_FALSE; } EOLIAN Eina_Bool _elm_list_efl_access_selection_selected_child_deselect(Eo *obj EINA_UNUSED, Elm_List_Data *pd, int child_index) { Eo *item = eina_list_nth(pd->selected, child_index); if (item) { elm_list_item_selected_set(item, EINA_FALSE); return EINA_TRUE; } return EINA_FALSE; } EOLIAN Eina_Bool _elm_list_efl_access_selection_is_child_selected(Eo *obj EINA_UNUSED, Elm_List_Data *pd, int child_index) { Eo *item = eina_list_nth(pd->items, child_index); if (item) return elm_list_item_selected_get(item); return EINA_FALSE; } EOLIAN Eina_Bool _elm_list_efl_access_selection_all_children_select(Eo *obj EINA_UNUSED, Elm_List_Data *pd) { Eo *it; Eina_List *l; if (pd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) return EINA_FALSE; EINA_LIST_FOREACH(pd->items, l, it) elm_list_item_selected_set(it, EINA_TRUE); return EINA_TRUE; } EOLIAN Eina_Bool _elm_list_efl_access_selection_access_selection_clear(Eo *obj EINA_UNUSED, Elm_List_Data *pd) { Eo *it; Eina_List *l; if (pd->select_mode == ELM_OBJECT_SELECT_MODE_NONE) return EINA_FALSE; EINA_LIST_FOREACH(pd->items, l, it) elm_list_item_selected_set(it, EINA_FALSE); return EINA_TRUE; } EOLIAN Eina_Bool _elm_list_efl_access_selection_child_deselect(Eo *obj EINA_UNUSED, Elm_List_Data *pd, int child_index) { Eo *item = eina_list_nth(pd->items, child_index); if (item) { elm_list_item_selected_set(item, EINA_FALSE); return EINA_TRUE; } return EINA_FALSE; } EOLIAN static Eina_Bool _elm_list_efl_ui_widget_focus_state_apply(Eo *obj, Elm_List_Data *pd EINA_UNUSED, Efl_Ui_Widget_Focus_State current_state, Efl_Ui_Widget_Focus_State *configured_state, Efl_Ui_Widget *redirect EINA_UNUSED) { return efl_ui_widget_focus_state_apply(efl_super(obj, MY_CLASS), current_state, configured_state, obj); } /* Standard widget overrides */ ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(elm_list, Elm_List_Data) /* Internal EO APIs and hidden overrides */ #define ELM_LIST_EXTRA_OPS \ ELM_LAYOUT_SIZING_EVAL_OPS(elm_list), \ EFL_CANVAS_GROUP_ADD_DEL_OPS(elm_list) -#include "elm_list.eo.c" -#include "elm_list_item.eo.c" +#include "elm_list_eo.c" +#include "elm_list_item_eo.c" diff --git a/src/lib/elementary/elm_list.eo b/src/lib/elementary/elm_list.eo deleted file mode 100644 index 67efc7703e..0000000000 --- a/src/lib/elementary/elm_list.eo +++ /dev/null @@ -1,439 +0,0 @@ -import elm_general; - -class Elm.List extends Efl.Ui.Layout_Base implements Elm.Interface_Scrollable, - Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Access.Object, - Efl.Ui.Clickable, Efl.Ui.Selectable, Efl.Ui.Legacy, Elm.Widget_Item_Container -{ - [[Elementary list class]] - legacy_prefix: elm_list; - eo_prefix: elm_obj_list; - event_prefix: elm_list; - methods { - @property horizontal { - [[Control horizontal mode on the list object. - - Note: Vertical mode is set by default. - - On horizontal mode items are displayed on list from left to right, - instead of from top to bottom. Also, the list will scroll horizontally. - Each item will presents left icon on top and right icon, or end, at - the bottom.]] - set { - } - get { - } - values { - horizontal: bool; [[$true to enable horizontal or $false to disable it, i.e., to enable vertical mode.]] - } - } - @property select_mode { - [[Control the list select mode. - - elm_list_select_mode_set() changes item select mode in the list widget. - - #ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func and - callback when first becoming selected. Any further clicks will - do nothing, unless you set always select mode. - - #ELM_OBJECT_SELECT_MODE_ALWAYS : This means that, even if selected, - every click will make the selected callbacks be called. - - #ELM_OBJECT_SELECT_MODE_NONE : This will turn off the ability to select items - entirely and they will neither appear selected nor call selected - callback functions.]] - set { - } - get { - } - values { - mode: Elm.Object.Select_Mode(Elm.Object.Select_Mode.max); [[The select mode]] - } - } - @property focus_on_selection { - [[Control focus upon items selection mode - - When enabled, every selection of an item inside the genlist will automatically set focus to - its first focusable widget from the left. This is true of course if the selection was made by - clicking an unfocusable area in an item or selecting it with a key movement. Clicking on a - focusable widget inside an item will cause this particular item to get focus as usual.]] - set { - } - get { - } - values { - enabled: bool; [[The tree effect status ($true = enabled, $false = disabled)]] - } - } - @property multi_select { - [[Control multiple items selection on the list object. - - Disabled by default. If disabled, the user can select a single item of - the list each time. Selected items are highlighted on list. - If enabled, many items can be selected. - - If a selected item is selected again, it will be unselected.]] - set { - } - get { - } - values { - multi: bool; [[$true to enable multi selection or $false to disable it.]] - } - } - @property multi_select_mode { - [[Control the list multi select mode. - - - #ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever each - item is clicked. - - #ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only one item will be selected - although multi-selection is enabled, if clicked without pressing control - key. This mode is only available with multi-selection. - - See: @.multi_select - - @since 1.8]] - set { - } - get { - } - values { - mode: Elm.Object.Multi_Select_Mode(Elm.Object.Multi_Select_Mode.max); [[The multi select mode]] - } - } - @property mode { - [[Control which mode to use for the list object. - - Set list's resize behavior, transverse axis scroll and - items cropping. See each mode's description for more details. - - Note: Default value is #ELM_LIST_SCROLL. - - Only one mode at a time can be set. If a previous one was set, it - will be changed by the new mode after this call. Bitmasks won't - work here as well. - - Warning: This function's behavior will clash with those of - elm_scroller_content_min_limit(), so use either one of them, but - not both.]] - set { - } - get { - } - values { - mode: Elm.List.Mode(Elm.List.Mode.last); [[One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, #ELM_LIST_LIMIT or #ELM_LIST_EXPAND.]] - } - } - @property selected_item { - get { - [[Get the selected item. - - The selected item can be unselected with function - elm_list_item_selected_set(). - - The selected item always will be highlighted on list.]] - - return: Elm.Widget.Item; [[The selected list item.]] - } - } - @property items { - get { - [[Get a list of all the list items.]] - - return: const(list); [[A $list of list items, #Elm.Widget.Item, or $NULL on failure.]] - } - } - @property first_item { - get { - [[Get the first item in the list - - This returns the first item in the list.]] - - return: Elm.Widget.Item; [[The first item, or NULL if none]] - } - } - @property selected_items { - get { - [[Return a list of the currently selected list items. - - Multiple items can be selected if multi select is enabled. It can be - done with elm_list_multi_select_set().]] - - return: const(list); [[An $list of list items, #Elm.Widget.Item, or $NULL on failure.]] - } - } - @property last_item { - get { - [[Get the last item in the list - - This returns the last item in the list.]] - - return: Elm.Widget.Item; [[The last item, or NULL if none]] - } - } - item_insert_before { - [[Insert a new item into the list object before item $before. - - A new item will be created and added to the list. Its position in - this list will be just before item $before. - - Items created with this method can be deleted with elm_object_item_del(). - - Associated $data can be properly freed when item is deleted if a - callback function is set with elm_object_item_del_cb_set(). - - If a function is passed as argument, it will be called every time this item - is selected, i.e., the user clicks over an unselected item. - If always select is enabled it will call this function every time - user clicks over an item (already selected or not). - If such function isn't needed, just passing - $NULL as $func is enough. The same should be done for $data. - - Note: Remember that the label parameter is copied inside the list. So if an - application dynamically allocated the label, the application should free the - label after this call.]] - - return: Elm.Widget.Item; [[The created item or $NULL upon failure.]] - params { - @in before: Elm.Widget.Item; [[The list item to insert before.]] - @in label: string; [[The label of the list item.]] - @in icon: Efl.Canvas.Object @optional; [[The icon object to use for the left side of the item. An icon can be any Evas object, but usually it is an icon created with elm_icon_add().]] - @in end: Efl.Canvas.Object @optional; [[The icon object to use for the right side of the item. An icon can be any Evas object.]] - @in func: Evas_Smart_Cb @optional; [[The function to call when the item is clicked.]] - @in data: const(void_ptr) @optional; [[The data to associate with the item for related callbacks.]] - } - } - go { - [[Starts the list. - - Note: Call before running show() on the list object. - Warning: If not called, it won't display the list properly.]] - - /* FIXME-doc - @code - li = elm_list_add(win); - elm_list_item_append(li, "First", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "Second", NULL, NULL, NULL, NULL); - elm_list_go(li); - evas_object_show(li); - @endcode */ - } - item_insert_after { - [[Insert a new item into the list object after item $after. - - A new item will be created and added to the list. Its position in - this list will be just after item $after. - - Items created with this method can be deleted with elm_object_item_del(). - - Associated $data can be properly freed when item is deleted if a - callback function is set with elm_object_item_del_cb_set(). - - If a function is passed as argument, it will be called every time this item - is selected, i.e., the user clicks over an unselected item. - If always select is enabled it will call this function every time - user clicks over an item (already selected or not). - If such function isn't needed, just passing - $NULL as $func is enough. The same should be done for $data. - - Note: Remember that the label parameter is copied inside the list. So if an - application dynamically allocated the label, the application should free the - label after this call.]] - - return: Elm.Widget.Item; [[The created item or $NULL upon failure.]] - params { - @in after: Elm.Widget.Item; [[The list item to insert after.]] - @in label: string; [[The label of the list item.]] - @in icon: Efl.Canvas.Object @optional; [[The icon object to use for the left side of the item. An icon can be any Evas object, but usually it is an icon created with elm_icon_add().]] - @in end: Efl.Canvas.Object @optional; [[The icon object to use for the right side of the item. An icon can be any Evas object.]] - @in func: Evas_Smart_Cb @optional; [[The function to call when the item is clicked.]] - @in data: const(void_ptr) @optional; [[The data to associate with the item for related callbacks.]] - } - } - at_xy_item_get @const { - [[Get the item that is at the x, y canvas coords. - - This returns the item at the given coordinates (which are canvas - relative, not object-relative). If an item is at that coordinate, - that item handle is returned, and if $posret is not NULL, the - integer pointed to is set to a value of -1, 0 or 1, depending if - the coordinate is on the upper portion of that item (-1), on the - middle section (0) or on the lower part (1). If NULL is returned as - an item (no item found there), then posret may indicate -1 or 1 - based if the coordinate is above or below all items respectively in - the list.]] - - return: Elm.Widget.Item; [[The item at the coordinates or NULL if none]] - params { - @in x: int; [[The input x coordinate]] - @in y: int; [[The input y coordinate]] - @out posret: int; [[The position relative to the item returned here]] - } - } - item_append { - [[Append a new item to the list object. - - A new item will be created and appended to the list, i.e., will - be set as last item. - - Items created with this method can be deleted with elm_object_item_del(). - - Associated $data can be properly freed when item is deleted if a - callback function is set with elm_object_item_del_cb_set(). - - If a function is passed as argument, it will be called every time this item - is selected, i.e., the user clicks over an unselected item. - If always select is enabled it will call this function every time - user clicks over an item (already selected or not). - If such function isn't needed, just passing - $NULL as $func is enough. The same should be done for $data. - - Note: Remember that the label parameter is copied inside the list. So if an - application dynamically allocated the label, the application should free the - label after this call.]] - - /* FIXME-doc - Simple example (with no function callback or data associated): - @code - li = elm_list_add(win); - ic = elm_icon_add(win); - elm_image_file_set(ic, "path/to/image", NULL); - elm_icon_resizable_set(ic, true, true); - elm_list_item_append(li, "label", ic, NULL, NULL, NULL); - elm_list_go(li); - evas_object_show(li); - @endcode - - @see elm_list_select_mode_set() - @see elm_object_item_del() - @see elm_object_item_del_cb_set() - @see elm_list_clear() - @see elm_icon_add() - */ - - return: Elm.Widget.Item; [[The created item or $NULL upon failure.]] - params { - @in label: string; [[The label of the list item.]] - @in icon: Efl.Canvas.Object @optional; [[The icon object to use for the left side of the item. An icon can be any Evas object, but usually it is an icon created with elm_icon_add().]] - @in end: Efl.Canvas.Object @optional; [[The icon object to use for the right side of the item. An icon can be any Evas object.]] - @in func: Evas_Smart_Cb @optional; [[The function to call when the item is clicked.]] - @in data: const(void_ptr) @optional; [[The data to associate with the item for related callbacks.]] - } - } - item_prepend { - [[Prepend a new item to the list object. - - A new item will be created and prepended to the list, i.e., will - be set as first item. - - Items created with this method can be deleted with elm_object_item_del(). - - Associated $data can be properly freed when item is deleted if a - callback function is set with elm_object_item_del_cb_set(). - - If a function is passed as argument, it will be called every time this item - is selected, i.e., the user clicks over an unselected item. - If always select is enabled it will call this function every time - user clicks over an item (already selected or not). - If such function isn't needed, just passing - $NULL as $func is enough. The same should be done for $data. - - Note: Remember that the label parameter is copied inside the list. So if an - application dynamically allocated the label, the application should free the - label after this call.]] - - return: Elm.Widget.Item; [[The created item or $NULL upon failure.]] - params { - @in label: string; [[The label of the list item.]] - @in icon: Efl.Canvas.Object @optional; [[The icon object to use for the left side of the item. An icon can be any Evas object, but usually it is an icon created with elm_icon_add().]] - @in end: Efl.Canvas.Object @optional; [[The icon object to use for the right side of the item. An icon can be any Evas object.]] - @in func: Evas_Smart_Cb @optional; [[The function to call when the item is clicked.]] - @in data: const(void_ptr) @optional; [[The data to associate with the item for related callbacks.]] - } - } - clear { - [[Remove all list's items.]] - } - item_sorted_insert { - [[Insert a new item into the sorted list object. - - Note: This function inserts values into a list object assuming it was - sorted and the result will be sorted. - - A new item will be created and added to the list. Its position in - this list will be found comparing the new item with previously inserted - items using function $cmp_func. - - Items created with this method can be deleted with elm_object_item_del(). - - Associated $data can be properly freed when item is deleted if a - callback function is set with elm_object_item_del_cb_set(). - - If a function is passed as argument, it will be called every time this item - is selected, i.e., the user clicks over an unselected item. - If always select is enabled it will call this function every time - user clicks over an item (already selected or not). - If such function isn't needed, just passing - $NULL as $func is enough. The same should be done for $data. - - Note: Remember that the label parameter is copied inside the list. So if an - application dynamically allocated the label, the application should free the - label after this call.]] - - return: Elm.Widget.Item; [[The created item or $NULL upon failure.]] - params { - @in label: string; [[The label of the list item.]] - @in icon: Efl.Canvas.Object @optional; [[The icon object to use for the left side of the item. An icon can be any Evas object, but usually it is an icon created with elm_icon_add().]] - @in end: Efl.Canvas.Object @optional; [[The icon object to use for the right side of the item. An icon can be any Evas object.]] - @in func: Evas_Smart_Cb @optional; [[The function to call when the item is clicked.]] - @in data: const(void_ptr) @optional; [[The data to associate with the item for related callbacks.]] - @in cmp_func: Eina_Compare_Cb; [[The comparing function to be used to sort list - items by #Elm.Widget.Item item handles. This function will - receive two items and compare them, returning a non-negative integer - if the second item should be place after the first, or negative value - if should be placed before.]] - } - } - } - implements { - class.constructor; - Efl.Object.constructor; - Efl.Gfx.Entity.position { set; } - Efl.Gfx.Entity.size { set; } - Efl.Canvas.Group.group_member_add; - Efl.Ui.Widget.theme_apply; - Efl.Ui.Widget.on_access_update; - Efl.Ui.Widget.focus_highlight_geometry { get; } - Efl.Ui.Widget.disabled {set;} - Efl.Ui.Focus.Object.on_focus_update; - Efl.Ui.L10n.translation_update; - Efl.Ui.Widget.widget_sub_object_del; - Efl.Ui.Widget.widget_input_event_handler; - Elm.Widget_Item_Container.focused_item { get; } - Efl.Ui.Widget.focus_state_apply; - Elm.Interface_Scrollable.item_loop_enabled { get; set; } - Elm.Interface_Scrollable.policy { set; } - Efl.Access.Widget.Action.elm_actions { get; } - Efl.Access.Object.access_children { get; } - Efl.Access.Selection.selected_children_count { get; } - Efl.Access.Selection.selected_child { get; } - Efl.Access.Selection.selected_child_deselect; - Efl.Access.Selection.child_select; - Efl.Access.Selection.child_deselect; - Efl.Access.Selection.is_child_selected; - Efl.Access.Selection.all_children_select; - Efl.Access.Selection.access_selection_clear; - } - events { - activated: Efl.Object; [[Called when activated]] - edge,top: void; [[Called when top edge was reached]] - edge,bottom: void; [[Called when bottom edge was reached]] - edge,left: void; [[Called when left edge was reached]] - edge,right: void; [[Called when right edge was reached]] - swipe: Efl.Object; [[Called when swipe is detected]] - highlighted: Efl.Object; [[Called when highlighted]] - unhighlighted: Efl.Object; [[Called when no longer highlighted]] - item,focused: Efl.Object; [[Called when item got focus]] - item,unfocused: Efl.Object; [[Called when item no longer has focus]] - /* FIXME: Nobody emits these - item,reorder,anim,start; [[Called when item reorder animation started]] - item,reorder,anim,stop; [[Called when item reorder animation stopped]] - */ - } -} diff --git a/src/lib/elementary/elm_list_eo.c b/src/lib/elementary/elm_list_eo.c new file mode 100644 index 0000000000..077fcac301 --- /dev/null +++ b/src/lib/elementary/elm_list_eo.c @@ -0,0 +1,368 @@ +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_ACTIVATED = + EFL_EVENT_DESCRIPTION("activated"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_EDGE_TOP = + EFL_EVENT_DESCRIPTION("edge,top"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_EDGE_BOTTOM = + EFL_EVENT_DESCRIPTION("edge,bottom"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_EDGE_LEFT = + EFL_EVENT_DESCRIPTION("edge,left"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_EDGE_RIGHT = + EFL_EVENT_DESCRIPTION("edge,right"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_SWIPE = + EFL_EVENT_DESCRIPTION("swipe"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_HIGHLIGHTED = + EFL_EVENT_DESCRIPTION("highlighted"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_UNHIGHLIGHTED = + EFL_EVENT_DESCRIPTION("unhighlighted"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_ITEM_FOCUSED = + EFL_EVENT_DESCRIPTION("item,focused"); +EWAPI const Efl_Event_Description _ELM_LIST_EVENT_ITEM_UNFOCUSED = + EFL_EVENT_DESCRIPTION("item,unfocused"); + +void _elm_list_horizontal_set(Eo *obj, Elm_List_Data *pd, Eina_Bool horizontal); + + +static Eina_Error +__eolian_elm_list_horizontal_set_reflect(Eo *obj, Eina_Value val) +{ + Eina_Error r = 0; Eina_Bool cval; + if (!eina_value_bool_convert(&val, &cval)) + { + r = EINA_ERROR_VALUE_FAILED; + goto end; + } + elm_obj_list_horizontal_set(obj, cval); + end: + eina_value_flush(&val); + return r; +} + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_horizontal_set, EFL_FUNC_CALL(horizontal), Eina_Bool horizontal); + +Eina_Bool _elm_list_horizontal_get(const Eo *obj, Elm_List_Data *pd); + + +static Eina_Value +__eolian_elm_list_horizontal_get_reflect(Eo *obj) +{ + Eina_Bool val = elm_obj_list_horizontal_get(obj); + return eina_value_bool_init(val); +} + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_horizontal_get, Eina_Bool, 0); + +void _elm_list_select_mode_set(Eo *obj, Elm_List_Data *pd, Elm_Object_Select_Mode mode); + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_select_mode_set, EFL_FUNC_CALL(mode), Elm_Object_Select_Mode mode); + +Elm_Object_Select_Mode _elm_list_select_mode_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_select_mode_get, Elm_Object_Select_Mode, 4 /* Elm.Object.Select_Mode.max */); + +void _elm_list_focus_on_selection_set(Eo *obj, Elm_List_Data *pd, Eina_Bool enabled); + + +static Eina_Error +__eolian_elm_list_focus_on_selection_set_reflect(Eo *obj, Eina_Value val) +{ + Eina_Error r = 0; Eina_Bool cval; + if (!eina_value_bool_convert(&val, &cval)) + { + r = EINA_ERROR_VALUE_FAILED; + goto end; + } + elm_obj_list_focus_on_selection_set(obj, cval); + end: + eina_value_flush(&val); + return r; +} + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_focus_on_selection_set, EFL_FUNC_CALL(enabled), Eina_Bool enabled); + +Eina_Bool _elm_list_focus_on_selection_get(const Eo *obj, Elm_List_Data *pd); + + +static Eina_Value +__eolian_elm_list_focus_on_selection_get_reflect(Eo *obj) +{ + Eina_Bool val = elm_obj_list_focus_on_selection_get(obj); + return eina_value_bool_init(val); +} + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_focus_on_selection_get, Eina_Bool, 0); + +void _elm_list_multi_select_set(Eo *obj, Elm_List_Data *pd, Eina_Bool multi); + + +static Eina_Error +__eolian_elm_list_multi_select_set_reflect(Eo *obj, Eina_Value val) +{ + Eina_Error r = 0; Eina_Bool cval; + if (!eina_value_bool_convert(&val, &cval)) + { + r = EINA_ERROR_VALUE_FAILED; + goto end; + } + elm_obj_list_multi_select_set(obj, cval); + end: + eina_value_flush(&val); + return r; +} + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_multi_select_set, EFL_FUNC_CALL(multi), Eina_Bool multi); + +Eina_Bool _elm_list_multi_select_get(const Eo *obj, Elm_List_Data *pd); + + +static Eina_Value +__eolian_elm_list_multi_select_get_reflect(Eo *obj) +{ + Eina_Bool val = elm_obj_list_multi_select_get(obj); + return eina_value_bool_init(val); +} + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_multi_select_get, Eina_Bool, 0); + +void _elm_list_multi_select_mode_set(Eo *obj, Elm_List_Data *pd, Elm_Object_Multi_Select_Mode mode); + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_multi_select_mode_set, EFL_FUNC_CALL(mode), Elm_Object_Multi_Select_Mode mode); + +Elm_Object_Multi_Select_Mode _elm_list_multi_select_mode_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_multi_select_mode_get, Elm_Object_Multi_Select_Mode, 2 /* Elm.Object.Multi_Select_Mode.max */); + +void _elm_list_mode_set(Eo *obj, Elm_List_Data *pd, Elm_List_Mode mode); + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_mode_set, EFL_FUNC_CALL(mode), Elm_List_Mode mode); + +Elm_List_Mode _elm_list_mode_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_mode_get, Elm_List_Mode, 4 /* Elm.List.Mode.last */); + +Elm_Widget_Item *_elm_list_selected_item_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_selected_item_get, Elm_Widget_Item *, NULL); + +const Eina_List *_elm_list_items_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_items_get, const Eina_List *, NULL); + +Elm_Widget_Item *_elm_list_first_item_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_first_item_get, Elm_Widget_Item *, NULL); + +const Eina_List *_elm_list_selected_items_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_selected_items_get, const Eina_List *, NULL); + +Elm_Widget_Item *_elm_list_last_item_get(const Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_last_item_get, Elm_Widget_Item *, NULL); + +Elm_Widget_Item *_elm_list_item_insert_before(Eo *obj, Elm_List_Data *pd, Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +EOAPI EFL_FUNC_BODYV(elm_obj_list_item_insert_before, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(before, label, icon, end, func, data), Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +void _elm_list_go(Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_VOID_FUNC_BODY(elm_obj_list_go); + +Elm_Widget_Item *_elm_list_item_insert_after(Eo *obj, Elm_List_Data *pd, Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +EOAPI EFL_FUNC_BODYV(elm_obj_list_item_insert_after, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(after, label, icon, end, func, data), Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +Elm_Widget_Item *_elm_list_at_xy_item_get(const Eo *obj, Elm_List_Data *pd, int x, int y, int *posret); + +EOAPI EFL_FUNC_BODYV_CONST(elm_obj_list_at_xy_item_get, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(x, y, posret), int x, int y, int *posret); + +Elm_Widget_Item *_elm_list_item_append(Eo *obj, Elm_List_Data *pd, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +EOAPI EFL_FUNC_BODYV(elm_obj_list_item_append, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(label, icon, end, func, data), const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +Elm_Widget_Item *_elm_list_item_prepend(Eo *obj, Elm_List_Data *pd, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +EOAPI EFL_FUNC_BODYV(elm_obj_list_item_prepend, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(label, icon, end, func, data), const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +void _elm_list_clear(Eo *obj, Elm_List_Data *pd); + +EOAPI EFL_VOID_FUNC_BODY(elm_obj_list_clear); + +Elm_Widget_Item *_elm_list_item_sorted_insert(Eo *obj, Elm_List_Data *pd, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func); + +EOAPI EFL_FUNC_BODYV(elm_obj_list_item_sorted_insert, Elm_Widget_Item *, NULL, EFL_FUNC_CALL(label, icon, end, func, data, cmp_func), const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func); + +Efl_Object *_elm_list_efl_object_constructor(Eo *obj, Elm_List_Data *pd); + + +void _elm_list_efl_gfx_entity_position_set(Eo *obj, Elm_List_Data *pd, Eina_Position2D pos); + + +void _elm_list_efl_gfx_entity_size_set(Eo *obj, Elm_List_Data *pd, Eina_Size2D size); + + +void _elm_list_efl_canvas_group_group_member_add(Eo *obj, Elm_List_Data *pd, Efl_Canvas_Object *sub_obj); + + +Eina_Error _elm_list_efl_ui_widget_theme_apply(Eo *obj, Elm_List_Data *pd); + + +void _elm_list_efl_ui_widget_on_access_update(Eo *obj, Elm_List_Data *pd, Eina_Bool enable); + + +Eina_Rect _elm_list_efl_ui_widget_focus_highlight_geometry_get(const Eo *obj, Elm_List_Data *pd); + + +void _elm_list_efl_ui_widget_disabled_set(Eo *obj, Elm_List_Data *pd, Eina_Bool disabled); + + +Eina_Bool _elm_list_efl_ui_focus_object_on_focus_update(Eo *obj, Elm_List_Data *pd); + + +void _elm_list_efl_ui_l10n_translation_update(Eo *obj, Elm_List_Data *pd); + + +Eina_Bool _elm_list_efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_List_Data *pd, Efl_Canvas_Object *sub_obj); + + +Eina_Bool _elm_list_efl_ui_widget_widget_input_event_handler(Eo *obj, Elm_List_Data *pd, const Efl_Event *eo_event, Efl_Canvas_Object *source); + + +Elm_Widget_Item *_elm_list_elm_widget_item_container_focused_item_get(const Eo *obj, Elm_List_Data *pd); + + +Eina_Bool _elm_list_efl_ui_widget_focus_state_apply(Eo *obj, Elm_List_Data *pd, Efl_Ui_Widget_Focus_State current_state, Efl_Ui_Widget_Focus_State *configured_state, Efl_Ui_Widget *redirect); + + +void _elm_list_elm_interface_scrollable_item_loop_enabled_set(Eo *obj, Elm_List_Data *pd, Eina_Bool enable); + + +Eina_Bool _elm_list_elm_interface_scrollable_item_loop_enabled_get(const Eo *obj, Elm_List_Data *pd); + + +void _elm_list_elm_interface_scrollable_policy_set(Eo *obj, Elm_List_Data *pd, Elm_Scroller_Policy hbar, Elm_Scroller_Policy vbar); + + +const Efl_Access_Action_Data *_elm_list_efl_access_widget_action_elm_actions_get(const Eo *obj, Elm_List_Data *pd); + + +Eina_List *_elm_list_efl_access_object_access_children_get(const Eo *obj, Elm_List_Data *pd); + + +int _elm_list_efl_access_selection_selected_children_count_get(const Eo *obj, Elm_List_Data *pd); + + +Efl_Object *_elm_list_efl_access_selection_selected_child_get(const Eo *obj, Elm_List_Data *pd, int selected_child_index); + + +Eina_Bool _elm_list_efl_access_selection_selected_child_deselect(Eo *obj, Elm_List_Data *pd, int child_index); + + +Eina_Bool _elm_list_efl_access_selection_child_select(Eo *obj, Elm_List_Data *pd, int child_index); + + +Eina_Bool _elm_list_efl_access_selection_child_deselect(Eo *obj, Elm_List_Data *pd, int child_index); + + +Eina_Bool _elm_list_efl_access_selection_is_child_selected(Eo *obj, Elm_List_Data *pd, int child_index); + + +Eina_Bool _elm_list_efl_access_selection_all_children_select(Eo *obj, Elm_List_Data *pd); + + +Eina_Bool _elm_list_efl_access_selection_access_selection_clear(Eo *obj, Elm_List_Data *pd); + + +static Eina_Bool +_elm_list_class_initializer(Efl_Class *klass) +{ + const Efl_Object_Ops *opsp = NULL; + + const Efl_Object_Property_Reflection_Ops *ropsp = NULL; + +#ifndef ELM_LIST_EXTRA_OPS +#define ELM_LIST_EXTRA_OPS +#endif + + EFL_OPS_DEFINE(ops, + EFL_OBJECT_OP_FUNC(elm_obj_list_horizontal_set, _elm_list_horizontal_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_horizontal_get, _elm_list_horizontal_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_select_mode_set, _elm_list_select_mode_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_select_mode_get, _elm_list_select_mode_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_focus_on_selection_set, _elm_list_focus_on_selection_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_focus_on_selection_get, _elm_list_focus_on_selection_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_multi_select_set, _elm_list_multi_select_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_multi_select_get, _elm_list_multi_select_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_multi_select_mode_set, _elm_list_multi_select_mode_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_multi_select_mode_get, _elm_list_multi_select_mode_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_mode_set, _elm_list_mode_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_mode_get, _elm_list_mode_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_selected_item_get, _elm_list_selected_item_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_items_get, _elm_list_items_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_first_item_get, _elm_list_first_item_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_selected_items_get, _elm_list_selected_items_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_last_item_get, _elm_list_last_item_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_insert_before, _elm_list_item_insert_before), + EFL_OBJECT_OP_FUNC(elm_obj_list_go, _elm_list_go), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_insert_after, _elm_list_item_insert_after), + EFL_OBJECT_OP_FUNC(elm_obj_list_at_xy_item_get, _elm_list_at_xy_item_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_append, _elm_list_item_append), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_prepend, _elm_list_item_prepend), + EFL_OBJECT_OP_FUNC(elm_obj_list_clear, _elm_list_clear), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_sorted_insert, _elm_list_item_sorted_insert), + EFL_OBJECT_OP_FUNC(efl_constructor, _elm_list_efl_object_constructor), + EFL_OBJECT_OP_FUNC(efl_gfx_entity_position_set, _elm_list_efl_gfx_entity_position_set), + EFL_OBJECT_OP_FUNC(efl_gfx_entity_size_set, _elm_list_efl_gfx_entity_size_set), + EFL_OBJECT_OP_FUNC(efl_canvas_group_member_add, _elm_list_efl_canvas_group_group_member_add), + EFL_OBJECT_OP_FUNC(efl_ui_widget_theme_apply, _elm_list_efl_ui_widget_theme_apply), + EFL_OBJECT_OP_FUNC(efl_ui_widget_on_access_update, _elm_list_efl_ui_widget_on_access_update), + EFL_OBJECT_OP_FUNC(efl_ui_widget_focus_highlight_geometry_get, _elm_list_efl_ui_widget_focus_highlight_geometry_get), + EFL_OBJECT_OP_FUNC(efl_ui_widget_disabled_set, _elm_list_efl_ui_widget_disabled_set), + EFL_OBJECT_OP_FUNC(efl_ui_focus_object_on_focus_update, _elm_list_efl_ui_focus_object_on_focus_update), + EFL_OBJECT_OP_FUNC(efl_ui_l10n_translation_update, _elm_list_efl_ui_l10n_translation_update), + EFL_OBJECT_OP_FUNC(efl_ui_widget_sub_object_del, _elm_list_efl_ui_widget_widget_sub_object_del), + EFL_OBJECT_OP_FUNC(efl_ui_widget_input_event_handler, _elm_list_efl_ui_widget_widget_input_event_handler), + EFL_OBJECT_OP_FUNC(elm_widget_item_container_focused_item_get, _elm_list_elm_widget_item_container_focused_item_get), + EFL_OBJECT_OP_FUNC(efl_ui_widget_focus_state_apply, _elm_list_efl_ui_widget_focus_state_apply), + EFL_OBJECT_OP_FUNC(elm_interface_scrollable_item_loop_enabled_set, _elm_list_elm_interface_scrollable_item_loop_enabled_set), + EFL_OBJECT_OP_FUNC(elm_interface_scrollable_item_loop_enabled_get, _elm_list_elm_interface_scrollable_item_loop_enabled_get), + EFL_OBJECT_OP_FUNC(elm_interface_scrollable_policy_set, _elm_list_elm_interface_scrollable_policy_set), + EFL_OBJECT_OP_FUNC(efl_access_widget_action_elm_actions_get, _elm_list_efl_access_widget_action_elm_actions_get), + EFL_OBJECT_OP_FUNC(efl_access_object_access_children_get, _elm_list_efl_access_object_access_children_get), + EFL_OBJECT_OP_FUNC(efl_access_selection_selected_children_count_get, _elm_list_efl_access_selection_selected_children_count_get), + EFL_OBJECT_OP_FUNC(efl_access_selection_selected_child_get, _elm_list_efl_access_selection_selected_child_get), + EFL_OBJECT_OP_FUNC(efl_access_selection_selected_child_deselect, _elm_list_efl_access_selection_selected_child_deselect), + EFL_OBJECT_OP_FUNC(efl_access_selection_child_select, _elm_list_efl_access_selection_child_select), + EFL_OBJECT_OP_FUNC(efl_access_selection_child_deselect, _elm_list_efl_access_selection_child_deselect), + EFL_OBJECT_OP_FUNC(efl_access_selection_is_child_selected, _elm_list_efl_access_selection_is_child_selected), + EFL_OBJECT_OP_FUNC(efl_access_selection_all_children_select, _elm_list_efl_access_selection_all_children_select), + EFL_OBJECT_OP_FUNC(efl_access_selection_clear, _elm_list_efl_access_selection_access_selection_clear), + ELM_LIST_EXTRA_OPS + ); + opsp = &ops; + + static const Efl_Object_Property_Reflection refl_table[] = { + {"horizontal", __eolian_elm_list_horizontal_set_reflect, __eolian_elm_list_horizontal_get_reflect}, + {"focus_on_selection", __eolian_elm_list_focus_on_selection_set_reflect, __eolian_elm_list_focus_on_selection_get_reflect}, + {"multi_select", __eolian_elm_list_multi_select_set_reflect, __eolian_elm_list_multi_select_get_reflect}, + }; + static const Efl_Object_Property_Reflection_Ops rops = { + refl_table, EINA_C_ARRAY_LENGTH(refl_table) + }; + ropsp = &rops; + + return efl_class_functions_set(klass, opsp, ropsp); +} + +static const Efl_Class_Description _elm_list_class_desc = { + EO_VERSION, + "Elm.List", + EFL_CLASS_TYPE_REGULAR, + sizeof(Elm_List_Data), + _elm_list_class_initializer, + _elm_list_class_constructor, + NULL +}; + +EFL_DEFINE_CLASS(elm_list_class_get, &_elm_list_class_desc, EFL_UI_LAYOUT_BASE_CLASS, ELM_INTERFACE_SCROLLABLE_MIXIN, EFL_ACCESS_WIDGET_ACTION_MIXIN, EFL_ACCESS_SELECTION_INTERFACE, EFL_ACCESS_OBJECT_MIXIN, EFL_UI_CLICKABLE_INTERFACE, EFL_UI_SELECTABLE_INTERFACE, EFL_UI_LEGACY_INTERFACE, ELM_WIDGET_ITEM_CONTAINER_INTERFACE, NULL); + +#include "elm_list_eo.legacy.c" diff --git a/src/lib/elementary/elm_list_eo.h b/src/lib/elementary/elm_list_eo.h new file mode 100644 index 0000000000..4587ed0744 --- /dev/null +++ b/src/lib/elementary/elm_list_eo.h @@ -0,0 +1,640 @@ +#ifndef _ELM_LIST_EO_H_ +#define _ELM_LIST_EO_H_ + +#ifndef _ELM_LIST_EO_CLASS_TYPE +#define _ELM_LIST_EO_CLASS_TYPE + +typedef Eo Elm_List; + +#endif + +#ifndef _ELM_LIST_EO_TYPES +#define _ELM_LIST_EO_TYPES + + +#endif +/** Elementary list class + * + * @ingroup Elm_List + */ +#define ELM_LIST_CLASS elm_list_class_get() + +EWAPI const Efl_Class *elm_list_class_get(void); + +/** + * @brief Control horizontal mode on the list object. + * + * @note Vertical mode is set by default. + * + * On horizontal mode items are displayed on list from left to right, instead + * of from top to bottom. Also, the list will scroll horizontally. Each item + * will presents left icon on top and right icon, or end, at the bottom. + * + * @param[in] obj The object. + * @param[in] horizontal @c true to enable horizontal or @c false to disable + * it, i.e., to enable vertical mode. + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_horizontal_set(Eo *obj, Eina_Bool horizontal); + +/** + * @brief Control horizontal mode on the list object. + * + * @note Vertical mode is set by default. + * + * On horizontal mode items are displayed on list from left to right, instead + * of from top to bottom. Also, the list will scroll horizontally. Each item + * will presents left icon on top and right icon, or end, at the bottom. + * + * @param[in] obj The object. + * + * @return @c true to enable horizontal or @c false to disable it, i.e., to + * enable vertical mode. + * + * @ingroup Elm_List + */ +EOAPI Eina_Bool elm_obj_list_horizontal_get(const Eo *obj); + +/** + * @brief Control the list select mode. + * + * elm_list_select_mode_set() changes item select mode in the list widget. - + * #ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func + * and callback when first becoming selected. Any further clicks will do + * nothing, unless you set always select mode. - #ELM_OBJECT_SELECT_MODE_ALWAYS + * : This means that, even if selected, every click will make the selected + * callbacks be called. - #ELM_OBJECT_SELECT_MODE_NONE : This will turn off the + * ability to select items entirely and they will neither appear selected nor + * call selected callback functions. + * + * @param[in] obj The object. + * @param[in] mode The select mode + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_select_mode_set(Eo *obj, Elm_Object_Select_Mode mode); + +/** + * @brief Control the list select mode. + * + * elm_list_select_mode_set() changes item select mode in the list widget. - + * #ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func + * and callback when first becoming selected. Any further clicks will do + * nothing, unless you set always select mode. - #ELM_OBJECT_SELECT_MODE_ALWAYS + * : This means that, even if selected, every click will make the selected + * callbacks be called. - #ELM_OBJECT_SELECT_MODE_NONE : This will turn off the + * ability to select items entirely and they will neither appear selected nor + * call selected callback functions. + * + * @param[in] obj The object. + * + * @return The select mode + * + * @ingroup Elm_List + */ +EOAPI Elm_Object_Select_Mode elm_obj_list_select_mode_get(const Eo *obj); + +/** + * @brief Control focus upon items selection mode + * + * When enabled, every selection of an item inside the genlist will + * automatically set focus to its first focusable widget from the left. This is + * true of course if the selection was made by clicking an unfocusable area in + * an item or selecting it with a key movement. Clicking on a focusable widget + * inside an item will cause this particular item to get focus as usual. + * + * @param[in] obj The object. + * @param[in] enabled The tree effect status ($true = enabled, @c false = + * disabled) + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_focus_on_selection_set(Eo *obj, Eina_Bool enabled); + +/** + * @brief Control focus upon items selection mode + * + * When enabled, every selection of an item inside the genlist will + * automatically set focus to its first focusable widget from the left. This is + * true of course if the selection was made by clicking an unfocusable area in + * an item or selecting it with a key movement. Clicking on a focusable widget + * inside an item will cause this particular item to get focus as usual. + * + * @param[in] obj The object. + * + * @return The tree effect status ($true = enabled, @c false = disabled) + * + * @ingroup Elm_List + */ +EOAPI Eina_Bool elm_obj_list_focus_on_selection_get(const Eo *obj); + +/** + * @brief Control multiple items selection on the list object. + * + * Disabled by default. If disabled, the user can select a single item of the + * list each time. Selected items are highlighted on list. If enabled, many + * items can be selected. + * + * If a selected item is selected again, it will be unselected. + * + * @param[in] obj The object. + * @param[in] multi @c true to enable multi selection or @c false to disable + * it. + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_multi_select_set(Eo *obj, Eina_Bool multi); + +/** + * @brief Control multiple items selection on the list object. + * + * Disabled by default. If disabled, the user can select a single item of the + * list each time. Selected items are highlighted on list. If enabled, many + * items can be selected. + * + * If a selected item is selected again, it will be unselected. + * + * @param[in] obj The object. + * + * @return @c true to enable multi selection or @c false to disable it. + * + * @ingroup Elm_List + */ +EOAPI Eina_Bool elm_obj_list_multi_select_get(const Eo *obj); + +/** + * @brief Control the list multi select mode. + * + * - #ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever + * each item is clicked. - #ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only + * one item will be selected although multi-selection is enabled, if clicked + * without pressing control key. This mode is only available with + * multi-selection. + * + * See: @ref elm_obj_list_multi_select_get + * + * @param[in] obj The object. + * @param[in] mode The multi select mode + * + * @since 1.8 + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_multi_select_mode_set(Eo *obj, Elm_Object_Multi_Select_Mode mode); + +/** + * @brief Control the list multi select mode. + * + * - #ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever + * each item is clicked. - #ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only + * one item will be selected although multi-selection is enabled, if clicked + * without pressing control key. This mode is only available with + * multi-selection. + * + * See: @ref elm_obj_list_multi_select_get + * + * @param[in] obj The object. + * + * @return The multi select mode + * + * @since 1.8 + * + * @ingroup Elm_List + */ +EOAPI Elm_Object_Multi_Select_Mode elm_obj_list_multi_select_mode_get(const Eo *obj); + +/** + * @brief Control which mode to use for the list object. + * + * Set list's resize behavior, transverse axis scroll and items cropping. See + * each mode's description for more details. + * + * @note Default value is #ELM_LIST_SCROLL. + * + * Only one mode at a time can be set. If a previous one was set, it will be + * changed by the new mode after this call. Bitmasks won't work here as well. + * + * @warning This function's behavior will clash with those of + * elm_scroller_content_min_limit(), so use either one of them, but not both. + * + * @param[in] obj The object. + * @param[in] mode One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, + * #ELM_LIST_LIMIT or #ELM_LIST_EXPAND. + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_mode_set(Eo *obj, Elm_List_Mode mode); + +/** + * @brief Control which mode to use for the list object. + * + * Set list's resize behavior, transverse axis scroll and items cropping. See + * each mode's description for more details. + * + * @note Default value is #ELM_LIST_SCROLL. + * + * Only one mode at a time can be set. If a previous one was set, it will be + * changed by the new mode after this call. Bitmasks won't work here as well. + * + * @warning This function's behavior will clash with those of + * elm_scroller_content_min_limit(), so use either one of them, but not both. + * + * @param[in] obj The object. + * + * @return One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, + * #ELM_LIST_LIMIT or #ELM_LIST_EXPAND. + * + * @ingroup Elm_List + */ +EOAPI Elm_List_Mode elm_obj_list_mode_get(const Eo *obj); + +/** + * @brief Get the selected item. + * + * The selected item can be unselected with function + * elm_list_item_selected_set(). + * + * The selected item always will be highlighted on list. + * + * @param[in] obj The object. + * + * @return The selected list item. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_selected_item_get(const Eo *obj); + +/** + * @brief Get a list of all the list items. + * + * @param[in] obj The object. + * + * @return A @c list of list items, #Elm.Widget.Item, or @c NULL on failure. + * + * @ingroup Elm_List + */ +EOAPI const Eina_List *elm_obj_list_items_get(const Eo *obj); + +/** + * @brief Get the first item in the list + * + * This returns the first item in the list. + * + * @param[in] obj The object. + * + * @return The first item, or NULL if none + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_first_item_get(const Eo *obj); + +/** + * @brief Return a list of the currently selected list items. + * + * Multiple items can be selected if multi select is enabled. It can be done + * with elm_list_multi_select_set(). + * + * @param[in] obj The object. + * + * @return An @c list of list items, #Elm.Widget.Item, or @c NULL on failure. + * + * @ingroup Elm_List + */ +EOAPI const Eina_List *elm_obj_list_selected_items_get(const Eo *obj); + +/** + * @brief Get the last item in the list + * + * This returns the last item in the list. + * + * @param[in] obj The object. + * + * @return The last item, or NULL if none + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_last_item_get(const Eo *obj); + +/** + * @brief Insert a new item into the list object before item @c before. + * + * A new item will be created and added to the list. Its position in this list + * will be just before item @c before. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] before The list item to insert before. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_insert_before(Eo *obj, Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Starts the list. + * + * @note Call before running show() on the list object. Warning: If not called, + * it won't display the list properly. + * @param[in] obj The object. + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_go(Eo *obj); + +/** + * @brief Insert a new item into the list object after item @c after. + * + * A new item will be created and added to the list. Its position in this list + * will be just after item @c after. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] after The list item to insert after. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_insert_after(Eo *obj, Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Get the item that is at the x, y canvas coords. + * + * This returns the item at the given coordinates (which are canvas relative, + * not object-relative). If an item is at that coordinate, that item handle is + * returned, and if @c posret is not NULL, the integer pointed to is set to a + * value of -1, 0 or 1, depending if the coordinate is on the upper portion of + * that item (-1), on the middle section (0) or on the lower part (1). If NULL + * is returned as an item (no item found there), then posret may indicate -1 or + * 1 based if the coordinate is above or below all items respectively in the + * list. + * + * @param[in] obj The object. + * @param[in] x The input x coordinate + * @param[in] y The input y coordinate + * @param[out] posret The position relative to the item returned here + * + * @return The item at the coordinates or NULL if none + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_at_xy_item_get(const Eo *obj, int x, int y, int *posret); + +/** + * @brief Append a new item to the list object. + * + * A new item will be created and appended to the list, i.e., will be set as + * last item. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_append(Eo *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Prepend a new item to the list object. + * + * A new item will be created and prepended to the list, i.e., will be set as + * first item. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_prepend(Eo *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** Remove all list's items. + * + * @ingroup Elm_List + */ +EOAPI void elm_obj_list_clear(Eo *obj); + +/** + * @brief Insert a new item into the sorted list object. + * + * @note This function inserts values into a list object assuming it was sorted + * and the result will be sorted. + * + * A new item will be created and added to the list. Its position in this list + * will be found comparing the new item with previously inserted items using + * function @c cmp_func. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * @param[in] cmp_func The comparing function to be used to sort list items by + * #Elm.Widget.Item item handles. This function will receive two items and + * compare them, returning a non-negative integer if the second item should be + * place after the first, or negative value if should be placed before. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_sorted_insert(Eo *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func); + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_ACTIVATED; + +/** Called when activated + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_ACTIVATED (&(_ELM_LIST_EVENT_ACTIVATED)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_EDGE_TOP; + +/** Called when top edge was reached + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_EDGE_TOP (&(_ELM_LIST_EVENT_EDGE_TOP)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_EDGE_BOTTOM; + +/** Called when bottom edge was reached + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_EDGE_BOTTOM (&(_ELM_LIST_EVENT_EDGE_BOTTOM)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_EDGE_LEFT; + +/** Called when left edge was reached + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_EDGE_LEFT (&(_ELM_LIST_EVENT_EDGE_LEFT)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_EDGE_RIGHT; + +/** Called when right edge was reached + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_EDGE_RIGHT (&(_ELM_LIST_EVENT_EDGE_RIGHT)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_SWIPE; + +/** Called when swipe is detected + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_SWIPE (&(_ELM_LIST_EVENT_SWIPE)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_HIGHLIGHTED; + +/** Called when highlighted + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_HIGHLIGHTED (&(_ELM_LIST_EVENT_HIGHLIGHTED)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_UNHIGHLIGHTED; + +/** Called when no longer highlighted + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_UNHIGHLIGHTED (&(_ELM_LIST_EVENT_UNHIGHLIGHTED)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_ITEM_FOCUSED; + +/** Called when item got focus + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_ITEM_FOCUSED (&(_ELM_LIST_EVENT_ITEM_FOCUSED)) + +EWAPI extern const Efl_Event_Description _ELM_LIST_EVENT_ITEM_UNFOCUSED; + +/** Called when item no longer has focus + * @return Efl_Object * + * + * @ingroup Elm_List + */ +#define ELM_LIST_EVENT_ITEM_UNFOCUSED (&(_ELM_LIST_EVENT_ITEM_UNFOCUSED)) + +#endif diff --git a/src/lib/elementary/elm_list_eo.legacy.c b/src/lib/elementary/elm_list_eo.legacy.c new file mode 100644 index 0000000000..40f09ef183 --- /dev/null +++ b/src/lib/elementary/elm_list_eo.legacy.c @@ -0,0 +1,150 @@ + +EAPI void +elm_list_horizontal_set(Elm_List *obj, Eina_Bool horizontal) +{ + elm_obj_list_horizontal_set(obj, horizontal); +} + +EAPI Eina_Bool +elm_list_horizontal_get(const Elm_List *obj) +{ + return elm_obj_list_horizontal_get(obj); +} + +EAPI void +elm_list_select_mode_set(Elm_List *obj, Elm_Object_Select_Mode mode) +{ + elm_obj_list_select_mode_set(obj, mode); +} + +EAPI Elm_Object_Select_Mode +elm_list_select_mode_get(const Elm_List *obj) +{ + return elm_obj_list_select_mode_get(obj); +} + +EAPI void +elm_list_focus_on_selection_set(Elm_List *obj, Eina_Bool enabled) +{ + elm_obj_list_focus_on_selection_set(obj, enabled); +} + +EAPI Eina_Bool +elm_list_focus_on_selection_get(const Elm_List *obj) +{ + return elm_obj_list_focus_on_selection_get(obj); +} + +EAPI void +elm_list_multi_select_set(Elm_List *obj, Eina_Bool multi) +{ + elm_obj_list_multi_select_set(obj, multi); +} + +EAPI Eina_Bool +elm_list_multi_select_get(const Elm_List *obj) +{ + return elm_obj_list_multi_select_get(obj); +} + +EAPI void +elm_list_multi_select_mode_set(Elm_List *obj, Elm_Object_Multi_Select_Mode mode) +{ + elm_obj_list_multi_select_mode_set(obj, mode); +} + +EAPI Elm_Object_Multi_Select_Mode +elm_list_multi_select_mode_get(const Elm_List *obj) +{ + return elm_obj_list_multi_select_mode_get(obj); +} + +EAPI void +elm_list_mode_set(Elm_List *obj, Elm_List_Mode mode) +{ + elm_obj_list_mode_set(obj, mode); +} + +EAPI Elm_List_Mode +elm_list_mode_get(const Elm_List *obj) +{ + return elm_obj_list_mode_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_selected_item_get(const Elm_List *obj) +{ + return elm_obj_list_selected_item_get(obj); +} + +EAPI const Eina_List * +elm_list_items_get(const Elm_List *obj) +{ + return elm_obj_list_items_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_first_item_get(const Elm_List *obj) +{ + return elm_obj_list_first_item_get(obj); +} + +EAPI const Eina_List * +elm_list_selected_items_get(const Elm_List *obj) +{ + return elm_obj_list_selected_items_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_last_item_get(const Elm_List *obj) +{ + return elm_obj_list_last_item_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_item_insert_before(Elm_List *obj, Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data) +{ + return elm_obj_list_item_insert_before(obj, before, label, icon, end, func, data); +} + +EAPI void +elm_list_go(Elm_List *obj) +{ + elm_obj_list_go(obj); +} + +EAPI Elm_Widget_Item * +elm_list_item_insert_after(Elm_List *obj, Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data) +{ + return elm_obj_list_item_insert_after(obj, after, label, icon, end, func, data); +} + +EAPI Elm_Widget_Item * +elm_list_at_xy_item_get(const Elm_List *obj, int x, int y, int *posret) +{ + return elm_obj_list_at_xy_item_get(obj, x, y, posret); +} + +EAPI Elm_Widget_Item * +elm_list_item_append(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data) +{ + return elm_obj_list_item_append(obj, label, icon, end, func, data); +} + +EAPI Elm_Widget_Item * +elm_list_item_prepend(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data) +{ + return elm_obj_list_item_prepend(obj, label, icon, end, func, data); +} + +EAPI void +elm_list_clear(Elm_List *obj) +{ + elm_obj_list_clear(obj); +} + +EAPI Elm_Widget_Item * +elm_list_item_sorted_insert(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func) +{ + return elm_obj_list_item_sorted_insert(obj, label, icon, end, func, data, cmp_func); +} diff --git a/src/lib/elementary/elm_list_eo.legacy.h b/src/lib/elementary/elm_list_eo.legacy.h new file mode 100644 index 0000000000..6885674baf --- /dev/null +++ b/src/lib/elementary/elm_list_eo.legacy.h @@ -0,0 +1,547 @@ +#ifndef _ELM_LIST_EO_LEGACY_H_ +#define _ELM_LIST_EO_LEGACY_H_ + +#ifndef _ELM_LIST_EO_CLASS_TYPE +#define _ELM_LIST_EO_CLASS_TYPE + +typedef Eo Elm_List; + +#endif + +#ifndef _ELM_LIST_EO_TYPES +#define _ELM_LIST_EO_TYPES + + +#endif + +/** + * @brief Control horizontal mode on the list object. + * + * @note Vertical mode is set by default. + * + * On horizontal mode items are displayed on list from left to right, instead + * of from top to bottom. Also, the list will scroll horizontally. Each item + * will presents left icon on top and right icon, or end, at the bottom. + * + * @param[in] obj The object. + * @param[in] horizontal @c true to enable horizontal or @c false to disable + * it, i.e., to enable vertical mode. + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_horizontal_set(Elm_List *obj, Eina_Bool horizontal); + +/** + * @brief Control horizontal mode on the list object. + * + * @note Vertical mode is set by default. + * + * On horizontal mode items are displayed on list from left to right, instead + * of from top to bottom. Also, the list will scroll horizontally. Each item + * will presents left icon on top and right icon, or end, at the bottom. + * + * @param[in] obj The object. + * + * @return @c true to enable horizontal or @c false to disable it, i.e., to + * enable vertical mode. + * + * @ingroup Elm_List_Group + */ +EAPI Eina_Bool elm_list_horizontal_get(const Elm_List *obj); + +/** + * @brief Control the list select mode. + * + * elm_list_select_mode_set() changes item select mode in the list widget. - + * #ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func + * and callback when first becoming selected. Any further clicks will do + * nothing, unless you set always select mode. - #ELM_OBJECT_SELECT_MODE_ALWAYS + * : This means that, even if selected, every click will make the selected + * callbacks be called. - #ELM_OBJECT_SELECT_MODE_NONE : This will turn off the + * ability to select items entirely and they will neither appear selected nor + * call selected callback functions. + * + * @param[in] obj The object. + * @param[in] mode The select mode + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_select_mode_set(Elm_List *obj, Elm_Object_Select_Mode mode); + +/** + * @brief Control the list select mode. + * + * elm_list_select_mode_set() changes item select mode in the list widget. - + * #ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func + * and callback when first becoming selected. Any further clicks will do + * nothing, unless you set always select mode. - #ELM_OBJECT_SELECT_MODE_ALWAYS + * : This means that, even if selected, every click will make the selected + * callbacks be called. - #ELM_OBJECT_SELECT_MODE_NONE : This will turn off the + * ability to select items entirely and they will neither appear selected nor + * call selected callback functions. + * + * @param[in] obj The object. + * + * @return The select mode + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Object_Select_Mode elm_list_select_mode_get(const Elm_List *obj); + +/** + * @brief Control focus upon items selection mode + * + * When enabled, every selection of an item inside the genlist will + * automatically set focus to its first focusable widget from the left. This is + * true of course if the selection was made by clicking an unfocusable area in + * an item or selecting it with a key movement. Clicking on a focusable widget + * inside an item will cause this particular item to get focus as usual. + * + * @param[in] obj The object. + * @param[in] enabled The tree effect status ($true = enabled, @c false = + * disabled) + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_focus_on_selection_set(Elm_List *obj, Eina_Bool enabled); + +/** + * @brief Control focus upon items selection mode + * + * When enabled, every selection of an item inside the genlist will + * automatically set focus to its first focusable widget from the left. This is + * true of course if the selection was made by clicking an unfocusable area in + * an item or selecting it with a key movement. Clicking on a focusable widget + * inside an item will cause this particular item to get focus as usual. + * + * @param[in] obj The object. + * + * @return The tree effect status ($true = enabled, @c false = disabled) + * + * @ingroup Elm_List_Group + */ +EAPI Eina_Bool elm_list_focus_on_selection_get(const Elm_List *obj); + +/** + * @brief Control multiple items selection on the list object. + * + * Disabled by default. If disabled, the user can select a single item of the + * list each time. Selected items are highlighted on list. If enabled, many + * items can be selected. + * + * If a selected item is selected again, it will be unselected. + * + * @param[in] obj The object. + * @param[in] multi @c true to enable multi selection or @c false to disable + * it. + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_multi_select_set(Elm_List *obj, Eina_Bool multi); + +/** + * @brief Control multiple items selection on the list object. + * + * Disabled by default. If disabled, the user can select a single item of the + * list each time. Selected items are highlighted on list. If enabled, many + * items can be selected. + * + * If a selected item is selected again, it will be unselected. + * + * @param[in] obj The object. + * + * @return @c true to enable multi selection or @c false to disable it. + * + * @ingroup Elm_List_Group + */ +EAPI Eina_Bool elm_list_multi_select_get(const Elm_List *obj); + +/** + * @brief Control the list multi select mode. + * + * - #ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever + * each item is clicked. - #ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only + * one item will be selected although multi-selection is enabled, if clicked + * without pressing control key. This mode is only available with + * multi-selection. + * + * See: @ref elm_list_multi_select_get + * + * @param[in] obj The object. + * @param[in] mode The multi select mode + * + * @since 1.8 + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_multi_select_mode_set(Elm_List *obj, Elm_Object_Multi_Select_Mode mode); + +/** + * @brief Control the list multi select mode. + * + * - #ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever + * each item is clicked. - #ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only + * one item will be selected although multi-selection is enabled, if clicked + * without pressing control key. This mode is only available with + * multi-selection. + * + * See: @ref elm_list_multi_select_get + * + * @param[in] obj The object. + * + * @return The multi select mode + * + * @since 1.8 + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Object_Multi_Select_Mode elm_list_multi_select_mode_get(const Elm_List *obj); + +/** + * @brief Control which mode to use for the list object. + * + * Set list's resize behavior, transverse axis scroll and items cropping. See + * each mode's description for more details. + * + * @note Default value is #ELM_LIST_SCROLL. + * + * Only one mode at a time can be set. If a previous one was set, it will be + * changed by the new mode after this call. Bitmasks won't work here as well. + * + * @warning This function's behavior will clash with those of + * elm_scroller_content_min_limit(), so use either one of them, but not both. + * + * @param[in] obj The object. + * @param[in] mode One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, + * #ELM_LIST_LIMIT or #ELM_LIST_EXPAND. + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_mode_set(Elm_List *obj, Elm_List_Mode mode); + +/** + * @brief Control which mode to use for the list object. + * + * Set list's resize behavior, transverse axis scroll and items cropping. See + * each mode's description for more details. + * + * @note Default value is #ELM_LIST_SCROLL. + * + * Only one mode at a time can be set. If a previous one was set, it will be + * changed by the new mode after this call. Bitmasks won't work here as well. + * + * @warning This function's behavior will clash with those of + * elm_scroller_content_min_limit(), so use either one of them, but not both. + * + * @param[in] obj The object. + * + * @return One of #Elm_List_Mode: #ELM_LIST_COMPRESS, #ELM_LIST_SCROLL, + * #ELM_LIST_LIMIT or #ELM_LIST_EXPAND. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_List_Mode elm_list_mode_get(const Elm_List *obj); + +/** + * @brief Get the selected item. + * + * The selected item can be unselected with function + * elm_list_item_selected_set(). + * + * The selected item always will be highlighted on list. + * + * @param[in] obj The object. + * + * @return The selected list item. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_selected_item_get(const Elm_List *obj); + +/** + * @brief Get a list of all the list items. + * + * @param[in] obj The object. + * + * @return A @c list of list items, #Elm.Widget.Item, or @c NULL on failure. + * + * @ingroup Elm_List_Group + */ +EAPI const Eina_List *elm_list_items_get(const Elm_List *obj); + +/** + * @brief Get the first item in the list + * + * This returns the first item in the list. + * + * @param[in] obj The object. + * + * @return The first item, or NULL if none + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_first_item_get(const Elm_List *obj); + +/** + * @brief Return a list of the currently selected list items. + * + * Multiple items can be selected if multi select is enabled. It can be done + * with elm_list_multi_select_set(). + * + * @param[in] obj The object. + * + * @return An @c list of list items, #Elm.Widget.Item, or @c NULL on failure. + * + * @ingroup Elm_List_Group + */ +EAPI const Eina_List *elm_list_selected_items_get(const Elm_List *obj); + +/** + * @brief Get the last item in the list + * + * This returns the last item in the list. + * + * @param[in] obj The object. + * + * @return The last item, or NULL if none + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_last_item_get(const Elm_List *obj); + +/** + * @brief Insert a new item into the list object before item @c before. + * + * A new item will be created and added to the list. Its position in this list + * will be just before item @c before. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] before The list item to insert before. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_item_insert_before(Elm_List *obj, Elm_Widget_Item *before, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Starts the list. + * + * @note Call before running show() on the list object. Warning: If not called, + * it won't display the list properly. + * @param[in] obj The object. + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_go(Elm_List *obj); + +/** + * @brief Insert a new item into the list object after item @c after. + * + * A new item will be created and added to the list. Its position in this list + * will be just after item @c after. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] after The list item to insert after. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_item_insert_after(Elm_List *obj, Elm_Widget_Item *after, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Get the item that is at the x, y canvas coords. + * + * This returns the item at the given coordinates (which are canvas relative, + * not object-relative). If an item is at that coordinate, that item handle is + * returned, and if @c posret is not NULL, the integer pointed to is set to a + * value of -1, 0 or 1, depending if the coordinate is on the upper portion of + * that item (-1), on the middle section (0) or on the lower part (1). If NULL + * is returned as an item (no item found there), then posret may indicate -1 or + * 1 based if the coordinate is above or below all items respectively in the + * list. + * + * @param[in] obj The object. + * @param[in] x The input x coordinate + * @param[in] y The input y coordinate + * @param[out] posret The position relative to the item returned here + * + * @return The item at the coordinates or NULL if none + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_at_xy_item_get(const Elm_List *obj, int x, int y, int *posret); + +/** + * @brief Append a new item to the list object. + * + * A new item will be created and appended to the list, i.e., will be set as + * last item. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_item_append(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** + * @brief Prepend a new item to the list object. + * + * A new item will be created and prepended to the list, i.e., will be set as + * first item. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_item_prepend(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data); + +/** Remove all list's items. + * + * @ingroup Elm_List_Group + */ +EAPI void elm_list_clear(Elm_List *obj); + +/** + * @brief Insert a new item into the sorted list object. + * + * @note This function inserts values into a list object assuming it was sorted + * and the result will be sorted. + * + * A new item will be created and added to the list. Its position in this list + * will be found comparing the new item with previously inserted items using + * function @c cmp_func. + * + * Items created with this method can be deleted with elm_object_item_del(). + * + * Associated @c data can be properly freed when item is deleted if a callback + * function is set with elm_object_item_del_cb_set(). + * + * If a function is passed as argument, it will be called every time this item + * is selected, i.e., the user clicks over an unselected item. If always select + * is enabled it will call this function every time user clicks over an item + * (already selected or not). If such function isn't needed, just passing + * @c NULL as @c func is enough. The same should be done for @c data. + * + * @note Remember that the label parameter is copied inside the list. So if an + * application dynamically allocated the label, the application should free the + * label after this call. + * + * @param[in] obj The object. + * @param[in] label The label of the list item. + * @param[in] icon The icon object to use for the left side of the item. An + * icon can be any Evas object, but usually it is an icon created with + * elm_icon_add(). + * @param[in] end The icon object to use for the right side of the item. An + * icon can be any Evas object. + * @param[in] func The function to call when the item is clicked. + * @param[in] data The data to associate with the item for related callbacks. + * @param[in] cmp_func The comparing function to be used to sort list items by + * #Elm.Widget.Item item handles. This function will receive two items and + * compare them, returning a non-negative integer if the second item should be + * place after the first, or negative value if should be placed before. + * + * @return The created item or @c NULL upon failure. + * + * @ingroup Elm_List_Group + */ +EAPI Elm_Widget_Item *elm_list_item_sorted_insert(Elm_List *obj, const char *label, Efl_Canvas_Object *icon, Efl_Canvas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func); + +#endif diff --git a/src/lib/elementary/elm_list_item.eo b/src/lib/elementary/elm_list_item.eo deleted file mode 100644 index c3d18ba99f..0000000000 --- a/src/lib/elementary/elm_list_item.eo +++ /dev/null @@ -1,123 +0,0 @@ -class Elm.List.Item extends Elm.Widget.Item implements Efl.Ui.Legacy -{ - [[Elementary list item class]] - legacy_prefix: elm_list_item; - eo_prefix: elm_obj_list_item; - methods { - @property separator { - get { - [[Get a value whether item is a separator or not.]] - } - set { - [[Set or unset item as a separator. - - Items aren't set as separator by default. - - If set as separator it will display separator theme, - so won't display icons or label. - ]] - } - values { - setting: bool; [[$true means item $it is a separator. - $false indicates it's not.]] - } - } - @property selected { - get { - [[Get whether the item is selected or not.]] - } - set { - [[Set the selected state of an item. - - This sets the selected state of the given item. - - If a new item is selected the previously selected - will be unselected, unless multiple selection is - enabled with \@ref elm_list_multi_select_set. - Previously selected item can be get with function - \@ref elm_list_selected_item_get. - - Selected items will be highlighted. - ]] - } - values { - selected: bool; [[The selected state.]] - } - } - @property object { - get { - [[Get the real Evas(Edje) object created to implement - the view of a given list item. - - Base object is the $Evas_Object that represents that - item. - ]] - } - values { - obj: Efl.Canvas.Object; [[The base Edje object associated with the item.]] - } - } - @property prev { - get { - [[Get the item before the item in list. - - Note: If it is the first item, $null will be returned. - ]] - legacy: elm_list_item_prev; - } - values { - item: Elm.Widget.Item; [[The item before or $null.]] - } - } - @property next { - get { - [[Get the item after the item in list. - - Note: If it is the last item, $null will be returned. - ]] - legacy: elm_list_item_next; - } - values { - item: Elm.Widget.Item; [[The item after or $null.]] - } - } - /* init { FIXME - params { - Evas_Smart_Cb func; - const(void_ptr) data; - } - }*/ - show { - [[Show item in the list view. - - It won't animate list until item is visible. If such - behavior is wanted, use @.bring_in instead. - ]] - } - bring_in { - [[Bring in the given item to list view. - - This causes list to jump to the given item and show it - (by scrolling), if it is not fully visible. - - This may use animation to do so and take a period of time. - - If animation isn't wanted, @.show can be used. - ]] - } - } - implements { - Efl.Object.constructor; - Efl.Object.invalidate; - Efl.Object.destructor; - Elm.Widget.Item.disable; - Elm.Widget.Item.del_pre; - Elm.Widget.Item.signal_emit; - Elm.Widget.Item.item_focus { get; set; } - Elm.Widget.Item.part_text { get; set; } - Elm.Widget.Item.part_content { get; set; } - Elm.Widget.Item.part_content_unset; - Efl.Access.Object.i18n_name { get; } - Efl.Access.Object.state_set { get; } - } -} diff --git a/src/lib/elementary/elm_list_item_eo.c b/src/lib/elementary/elm_list_item_eo.c new file mode 100644 index 0000000000..358b9a2284 --- /dev/null +++ b/src/lib/elementary/elm_list_item_eo.c @@ -0,0 +1,195 @@ + +void _elm_list_item_separator_set(Eo *obj, Elm_List_Item_Data *pd, Eina_Bool setting); + + +static Eina_Error +__eolian_elm_list_item_separator_set_reflect(Eo *obj, Eina_Value val) +{ + Eina_Error r = 0; Eina_Bool cval; + if (!eina_value_bool_convert(&val, &cval)) + { + r = EINA_ERROR_VALUE_FAILED; + goto end; + } + elm_obj_list_item_separator_set(obj, cval); + end: + eina_value_flush(&val); + return r; +} + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_item_separator_set, EFL_FUNC_CALL(setting), Eina_Bool setting); + +Eina_Bool _elm_list_item_separator_get(const Eo *obj, Elm_List_Item_Data *pd); + + +static Eina_Value +__eolian_elm_list_item_separator_get_reflect(Eo *obj) +{ + Eina_Bool val = elm_obj_list_item_separator_get(obj); + return eina_value_bool_init(val); +} + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_item_separator_get, Eina_Bool, 0); + +void _elm_list_item_selected_set(Eo *obj, Elm_List_Item_Data *pd, Eina_Bool selected); + + +static Eina_Error +__eolian_elm_list_item_selected_set_reflect(Eo *obj, Eina_Value val) +{ + Eina_Error r = 0; Eina_Bool cval; + if (!eina_value_bool_convert(&val, &cval)) + { + r = EINA_ERROR_VALUE_FAILED; + goto end; + } + elm_obj_list_item_selected_set(obj, cval); + end: + eina_value_flush(&val); + return r; +} + +EOAPI EFL_VOID_FUNC_BODYV(elm_obj_list_item_selected_set, EFL_FUNC_CALL(selected), Eina_Bool selected); + +Eina_Bool _elm_list_item_selected_get(const Eo *obj, Elm_List_Item_Data *pd); + + +static Eina_Value +__eolian_elm_list_item_selected_get_reflect(Eo *obj) +{ + Eina_Bool val = elm_obj_list_item_selected_get(obj); + return eina_value_bool_init(val); +} + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_item_selected_get, Eina_Bool, 0); + +Efl_Canvas_Object *_elm_list_item_object_get(const Eo *obj, Elm_List_Item_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_item_object_get, Efl_Canvas_Object *, NULL); + +Elm_Widget_Item *_elm_list_item_prev_get(const Eo *obj, Elm_List_Item_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_item_prev_get, Elm_Widget_Item *, NULL); + +Elm_Widget_Item *_elm_list_item_next_get(const Eo *obj, Elm_List_Item_Data *pd); + +EOAPI EFL_FUNC_BODY_CONST(elm_obj_list_item_next_get, Elm_Widget_Item *, NULL); + +void _elm_list_item_show(Eo *obj, Elm_List_Item_Data *pd); + +EOAPI EFL_VOID_FUNC_BODY(elm_obj_list_item_show); + +void _elm_list_item_bring_in(Eo *obj, Elm_List_Item_Data *pd); + +EOAPI EFL_VOID_FUNC_BODY(elm_obj_list_item_bring_in); + +Efl_Object *_elm_list_item_efl_object_constructor(Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_efl_object_invalidate(Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_efl_object_destructor(Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_elm_widget_item_disable(Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_elm_widget_item_del_pre(Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_elm_widget_item_signal_emit(Eo *obj, Elm_List_Item_Data *pd, const char *emission, const char *source); + + +void _elm_list_item_elm_widget_item_item_focus_set(Eo *obj, Elm_List_Item_Data *pd, Eina_Bool focused); + + +Eina_Bool _elm_list_item_elm_widget_item_item_focus_get(const Eo *obj, Elm_List_Item_Data *pd); + + +void _elm_list_item_elm_widget_item_part_text_set(Eo *obj, Elm_List_Item_Data *pd, const char *part, const char *label); + + +const char *_elm_list_item_elm_widget_item_part_text_get(const Eo *obj, Elm_List_Item_Data *pd, const char *part); + + +void _elm_list_item_elm_widget_item_part_content_set(Eo *obj, Elm_List_Item_Data *pd, const char *part, Efl_Canvas_Object *content); + + +Efl_Canvas_Object *_elm_list_item_elm_widget_item_part_content_get(const Eo *obj, Elm_List_Item_Data *pd, const char *part); + + +Efl_Canvas_Object *_elm_list_item_elm_widget_item_part_content_unset(Eo *obj, Elm_List_Item_Data *pd, const char *part); + + +const char *_elm_list_item_efl_access_object_i18n_name_get(const Eo *obj, Elm_List_Item_Data *pd); + + +Efl_Access_State_Set _elm_list_item_efl_access_object_state_set_get(const Eo *obj, Elm_List_Item_Data *pd); + + +static Eina_Bool +_elm_list_item_class_initializer(Efl_Class *klass) +{ + const Efl_Object_Ops *opsp = NULL; + + const Efl_Object_Property_Reflection_Ops *ropsp = NULL; + +#ifndef ELM_LIST_ITEM_EXTRA_OPS +#define ELM_LIST_ITEM_EXTRA_OPS +#endif + + EFL_OPS_DEFINE(ops, + EFL_OBJECT_OP_FUNC(elm_obj_list_item_separator_set, _elm_list_item_separator_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_separator_get, _elm_list_item_separator_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_selected_set, _elm_list_item_selected_set), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_selected_get, _elm_list_item_selected_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_object_get, _elm_list_item_object_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_prev_get, _elm_list_item_prev_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_next_get, _elm_list_item_next_get), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_show, _elm_list_item_show), + EFL_OBJECT_OP_FUNC(elm_obj_list_item_bring_in, _elm_list_item_bring_in), + EFL_OBJECT_OP_FUNC(efl_constructor, _elm_list_item_efl_object_constructor), + EFL_OBJECT_OP_FUNC(efl_invalidate, _elm_list_item_efl_object_invalidate), + EFL_OBJECT_OP_FUNC(efl_destructor, _elm_list_item_efl_object_destructor), + EFL_OBJECT_OP_FUNC(elm_wdg_item_disable, _elm_list_item_elm_widget_item_disable), + EFL_OBJECT_OP_FUNC(elm_wdg_item_del_pre, _elm_list_item_elm_widget_item_del_pre), + EFL_OBJECT_OP_FUNC(elm_wdg_item_signal_emit, _elm_list_item_elm_widget_item_signal_emit), + EFL_OBJECT_OP_FUNC(elm_wdg_item_focus_set, _elm_list_item_elm_widget_item_item_focus_set), + EFL_OBJECT_OP_FUNC(elm_wdg_item_focus_get, _elm_list_item_elm_widget_item_item_focus_get), + EFL_OBJECT_OP_FUNC(elm_wdg_item_part_text_set, _elm_list_item_elm_widget_item_part_text_set), + EFL_OBJECT_OP_FUNC(elm_wdg_item_part_text_get, _elm_list_item_elm_widget_item_part_text_get), + EFL_OBJECT_OP_FUNC(elm_wdg_item_part_content_set, _elm_list_item_elm_widget_item_part_content_set), + EFL_OBJECT_OP_FUNC(elm_wdg_item_part_content_get, _elm_list_item_elm_widget_item_part_content_get), + EFL_OBJECT_OP_FUNC(elm_wdg_item_part_content_unset, _elm_list_item_elm_widget_item_part_content_unset), + EFL_OBJECT_OP_FUNC(efl_access_object_i18n_name_get, _elm_list_item_efl_access_object_i18n_name_get), + EFL_OBJECT_OP_FUNC(efl_access_object_state_set_get, _elm_list_item_efl_access_object_state_set_get), + ELM_LIST_ITEM_EXTRA_OPS + ); + opsp = &ops; + + static const Efl_Object_Property_Reflection refl_table[] = { + {"separator", __eolian_elm_list_item_separator_set_reflect, __eolian_elm_list_item_separator_get_reflect}, + {"selected", __eolian_elm_list_item_selected_set_reflect, __eolian_elm_list_item_selected_get_reflect}, + }; + static const Efl_Object_Property_Reflection_Ops rops = { + refl_table, EINA_C_ARRAY_LENGTH(refl_table) + }; + ropsp = &rops; + + return efl_class_functions_set(klass, opsp, ropsp); +} + +static const Efl_Class_Description _elm_list_item_class_desc = { + EO_VERSION, + "Elm.List.Item", + EFL_CLASS_TYPE_REGULAR, + sizeof(Elm_List_Item_Data), + _elm_list_item_class_initializer, + NULL, + NULL +}; + +EFL_DEFINE_CLASS(elm_list_item_class_get, &_elm_list_item_class_desc, ELM_WIDGET_ITEM_CLASS, EFL_UI_LEGACY_INTERFACE, NULL); + +#include "elm_list_item_eo.legacy.c" diff --git a/src/lib/elementary/elm_list_item_eo.h b/src/lib/elementary/elm_list_item_eo.h new file mode 100644 index 0000000000..8aef9230a9 --- /dev/null +++ b/src/lib/elementary/elm_list_item_eo.h @@ -0,0 +1,148 @@ +#ifndef _ELM_LIST_ITEM_EO_H_ +#define _ELM_LIST_ITEM_EO_H_ + +#ifndef _ELM_LIST_ITEM_EO_CLASS_TYPE +#define _ELM_LIST_ITEM_EO_CLASS_TYPE + +typedef Eo Elm_List_Item; + +#endif + +#ifndef _ELM_LIST_ITEM_EO_TYPES +#define _ELM_LIST_ITEM_EO_TYPES + + +#endif +/** Elementary list item class + * + * @ingroup Elm_List_Item + */ +#define ELM_LIST_ITEM_CLASS elm_list_item_class_get() + +EWAPI const Efl_Class *elm_list_item_class_get(void); + +/** + * @brief Set or unset item as a separator. + * + * Items aren't set as separator by default. + * + * If set as separator it will display separator theme, so won't display icons + * or label. + * + * @param[in] obj The object. + * @param[in] setting @c true means item @c it is a separator. @c false + * indicates it's not. + * + * @ingroup Elm_List_Item + */ +EOAPI void elm_obj_list_item_separator_set(Eo *obj, Eina_Bool setting); + +/** + * @brief Get a value whether item is a separator or not. + * + * @param[in] obj The object. + * + * @return @c true means item @c it is a separator. @c false indicates it's + * not. + * + * @ingroup Elm_List_Item + */ +EOAPI Eina_Bool elm_obj_list_item_separator_get(const Eo *obj); + +/** + * @brief Set the selected state of an item. + * + * This sets the selected state of the given item. + * + * If a new item is selected the previously selected will be unselected, unless + * multiple selection is enabled with @ref elm_list_multi_select_set. + * Previously selected item can be get with function @ref + * elm_list_selected_item_get. + * + * Selected items will be highlighted. + * + * @param[in] obj The object. + * @param[in] selected The selected state. + * + * @ingroup Elm_List_Item + */ +EOAPI void elm_obj_list_item_selected_set(Eo *obj, Eina_Bool selected); + +/** + * @brief Get whether the item is selected or not. + * + * @param[in] obj The object. + * + * @return The selected state. + * + * @ingroup Elm_List_Item + */ +EOAPI Eina_Bool elm_obj_list_item_selected_get(const Eo *obj); + +/** + * @brief Get the real Evas(Edje) object created to implement the view of a + * given list item. + * + * Base object is the @c Evas_Object that represents that item. + * + * @param[in] obj The object. + * + * @return The base Edje object associated with the item. + * + * @ingroup Elm_List_Item + */ +EOAPI Efl_Canvas_Object *elm_obj_list_item_object_get(const Eo *obj); + +/** + * @brief Get the item before the item in list. + * + * @note If it is the first item, @c null will be returned. + * + * @param[in] obj The object. + * + * @return The item before or @c null. + * + * @ingroup Elm_List_Item + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_prev_get(const Eo *obj); + +/** + * @brief Get the item after the item in list. + * + * @note If it is the last item, @c null will be returned. + * + * @param[in] obj The object. + * + * @return The item after or @c null. + * + * @ingroup Elm_List_Item + */ +EOAPI Elm_Widget_Item *elm_obj_list_item_next_get(const Eo *obj); + +/** + * @brief Show item in the list view. + * + * It won't animate list until item is visible. If such behavior is wanted, use + * @ref elm_obj_list_item_bring_in instead. + * @param[in] obj The object. + * + * @ingroup Elm_List_Item + */ +EOAPI void elm_obj_list_item_show(Eo *obj); + +/** + * @brief Bring in the given item to list view. + * + * This causes list to jump to the given item and show it (by scrolling), if it + * is not fully visible. + * + * This may use animation to do so and take a period of time. + * + * If animation isn't wanted, @ref elm_obj_list_item_show can be used. + * @param[in] obj The object. + * + * @ingroup Elm_List_Item + */ +EOAPI void elm_obj_list_item_bring_in(Eo *obj); + +#endif diff --git a/src/lib/elementary/elm_list_item_eo.legacy.c b/src/lib/elementary/elm_list_item_eo.legacy.c new file mode 100644 index 0000000000..609a9fbd5c --- /dev/null +++ b/src/lib/elementary/elm_list_item_eo.legacy.c @@ -0,0 +1,54 @@ + +EAPI void +elm_list_item_separator_set(Elm_List_Item *obj, Eina_Bool setting) +{ + elm_obj_list_item_separator_set(obj, setting); +} + +EAPI Eina_Bool +elm_list_item_separator_get(const Elm_List_Item *obj) +{ + return elm_obj_list_item_separator_get(obj); +} + +EAPI void +elm_list_item_selected_set(Elm_List_Item *obj, Eina_Bool selected) +{ + elm_obj_list_item_selected_set(obj, selected); +} + +EAPI Eina_Bool +elm_list_item_selected_get(const Elm_List_Item *obj) +{ + return elm_obj_list_item_selected_get(obj); +} + +EAPI Efl_Canvas_Object * +elm_list_item_object_get(const Elm_List_Item *obj) +{ + return elm_obj_list_item_object_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_item_prev(const Elm_List_Item *obj) +{ + return elm_obj_list_item_prev_get(obj); +} + +EAPI Elm_Widget_Item * +elm_list_item_next(const Elm_List_Item *obj) +{ + return elm_obj_list_item_next_get(obj); +} + +EAPI void +elm_list_item_show(Elm_List_Item *obj) +{ + elm_obj_list_item_show(obj); +} + +EAPI void +elm_list_item_bring_in(Elm_List_Item *obj) +{ + elm_obj_list_item_bring_in(obj); +} diff --git a/src/lib/elementary/elm_list_item_eo.legacy.h b/src/lib/elementary/elm_list_item_eo.legacy.h new file mode 100644 index 0000000000..af74d6ea03 --- /dev/null +++ b/src/lib/elementary/elm_list_item_eo.legacy.h @@ -0,0 +1,141 @@ +#ifndef _ELM_LIST_ITEM_EO_LEGACY_H_ +#define _ELM_LIST_ITEM_EO_LEGACY_H_ + +#ifndef _ELM_LIST_ITEM_EO_CLASS_TYPE +#define _ELM_LIST_ITEM_EO_CLASS_TYPE + +typedef Eo Elm_List_Item; + +#endif + +#ifndef _ELM_LIST_ITEM_EO_TYPES +#define _ELM_LIST_ITEM_EO_TYPES + + +#endif + +/** + * @brief Set or unset item as a separator. + * + * Items aren't set as separator by default. + * + * If set as separator it will display separator theme, so won't display icons + * or label. + * + * @param[in] obj The object. + * @param[in] setting @c true means item @c it is a separator. @c false + * indicates it's not. + * + * @ingroup Elm_List_Item_Group + */ +EAPI void elm_list_item_separator_set(Elm_List_Item *obj, Eina_Bool setting); + +/** + * @brief Get a value whether item is a separator or not. + * + * @param[in] obj The object. + * + * @return @c true means item @c it is a separator. @c false indicates it's + * not. + * + * @ingroup Elm_List_Item_Group + */ +EAPI Eina_Bool elm_list_item_separator_get(const Elm_List_Item *obj); + +/** + * @brief Set the selected state of an item. + * + * This sets the selected state of the given item. + * + * If a new item is selected the previously selected will be unselected, unless + * multiple selection is enabled with @ref elm_list_multi_select_set. + * Previously selected item can be get with function @ref + * elm_list_selected_item_get. + * + * Selected items will be highlighted. + * + * @param[in] obj The object. + * @param[in] selected The selected state. + * + * @ingroup Elm_List_Item_Group + */ +EAPI void elm_list_item_selected_set(Elm_List_Item *obj, Eina_Bool selected); + +/** + * @brief Get whether the item is selected or not. + * + * @param[in] obj The object. + * + * @return The selected state. + * + * @ingroup Elm_List_Item_Group + */ +EAPI Eina_Bool elm_list_item_selected_get(const Elm_List_Item *obj); + +/** + * @brief Get the real Evas(Edje) object created to implement the view of a + * given list item. + * + * Base object is the @c Evas_Object that represents that item. + * + * @param[in] obj The object. + * + * @return The base Edje object associated with the item. + * + * @ingroup Elm_List_Item_Group + */ +EAPI Efl_Canvas_Object *elm_list_item_object_get(const Elm_List_Item *obj); + +/** + * @brief Get the item before the item in list. + * + * @note If it is the first item, @c null will be returned. + * + * @param[in] obj The object. + * + * @return The item before or @c null. + * + * @ingroup Elm_List_Item_Group + */ +EAPI Elm_Widget_Item *elm_list_item_prev(const Elm_List_Item *obj); + +/** + * @brief Get the item after the item in list. + * + * @note If it is the last item, @c null will be returned. + * + * @param[in] obj The object. + * + * @return The item after or @c null. + * + * @ingroup Elm_List_Item_Group + */ +EAPI Elm_Widget_Item *elm_list_item_next(const Elm_List_Item *obj); + +/** + * @brief Show item in the list view. + * + * It won't animate list until item is visible. If such behavior is wanted, use + * @ref elm_list_item_bring_in instead. + * @param[in] obj The object. + * + * @ingroup Elm_List_Item_Group + */ +EAPI void elm_list_item_show(Elm_List_Item *obj); + +/** + * @brief Bring in the given item to list view. + * + * This causes list to jump to the given item and show it (by scrolling), if it + * is not fully visible. + * + * This may use animation to do so and take a period of time. + * + * If animation isn't wanted, @ref elm_list_item_show can be used. + * @param[in] obj The object. + * + * @ingroup Elm_List_Item_Group + */ +EAPI void elm_list_item_bring_in(Elm_List_Item *obj); + +#endif diff --git a/src/lib/elementary/elm_list_legacy.h b/src/lib/elementary/elm_list_legacy.h index a99532dfd2..0cdb591984 100644 --- a/src/lib/elementary/elm_list_legacy.h +++ b/src/lib/elementary/elm_list_legacy.h @@ -1,15 +1,15 @@ /** * Add a new list widget to the given parent Elementary * (container) object. * * @param parent The parent object. * @return a new list widget handle or @c NULL, on errors. * * This function inserts a new list widget on the canvas. * * @ingroup Elm_List */ EAPI Evas_Object *elm_list_add(Evas_Object *parent); -#include "elm_list_item.eo.legacy.h" -#include "elm_list.eo.legacy.h" +#include "elm_list_item_eo.legacy.h" +#include "elm_list_eo.legacy.h" diff --git a/src/lib/elementary/elm_widget_list.h b/src/lib/elementary/elm_widget_list.h index 707f170e92..a92807de0f 100644 --- a/src/lib/elementary/elm_widget_list.h +++ b/src/lib/elementary/elm_widget_list.h @@ -1,146 +1,146 @@ #ifndef ELM_WIDGET_LIST_H #define ELM_WIDGET_LIST_H #include "elm_interface_scrollable.h" #include "elm_widget_layout.h" -#include "elm_list.eo.h" -#include "elm_list_item.eo.h" +#include "elm_list_eo.h" +#include "elm_list_item_eo.h" /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK * IT AT RUNTIME. */ /** * @addtogroup Widget * @{ * * @section elm-list-class The Elementary List Class * * Elementary, besides having the @ref List widget, exposes its * foundation -- the Elementary List Class -- in order to create * other widgets which are a list with some more logic on top. */ #define ELM_LIST_SWIPE_MOVES 12 typedef struct _Elm_List_Item_Data Elm_List_Item_Data; /** * Base widget smart data extended with list instance data. */ typedef struct _Elm_List_Data Elm_List_Data; struct _Elm_List_Data { Evas_Object *box, *hit_rect; Eina_List *items, *selected; Elm_Object_Item *last_selected_item; Elm_Object_Item *focused_item; /**< a focused item by keypad arrow or mouse. This is set to NULL if widget looses focus. */ Elm_Object_Item *last_focused_item; /**< This records the last focused item when widget looses focus. This is required to set the focus on last focused item when widgets gets focus. */ Evas_Coord minw[2], minh[2], dx, dy; Elm_Object_Select_Mode select_mode; Elm_Object_Multi_Select_Mode multi_select_mode; /**< select mode for multiple selection */ int movements; int walking; Elm_List_Mode h_mode; Elm_List_Mode mode; struct { Evas_Coord x, y; } history[ELM_LIST_SWIPE_MOVES]; Eina_Bool focus_on_selection_enabled : 1; Eina_Bool was_selected : 1; Eina_Bool fix_pending : 1; Eina_Bool longpressed : 1; Eina_Bool scr_minw : 1; Eina_Bool scr_minh : 1; Eina_Bool on_hold : 1; Eina_Bool multi : 1; Eina_Bool swipe : 1; Eina_Bool delete_me : 1; Eina_Bool mouse_down : 1; /**< a flag that mouse is down on the list at the moment. this flag is set to true on mouse and reset to false on mouse up */ Eina_Bool item_loop_enable : 1; /**< value whether item loop feature is enabled or not. */ Eina_Bool item_looping_on : 1; Eina_Bool fixing_now : 1; }; struct _Elm_List_Item_Data { Elm_Widget_Item_Data *base; Ecore_Timer *swipe_timer; Ecore_Timer *long_timer; Evas_Object *icon, *end; Evas_Smart_Cb func; const char *label; Eina_List *node; Eina_Bool is_separator : 1; Eina_Bool highlighted : 1; Eina_Bool dummy_icon : 1; Eina_Bool dummy_end : 1; Eina_Bool selected : 1; Eina_Bool deleted : 1; Eina_Bool is_even : 1; Eina_Bool fixed : 1; Eina_Bool even : 1; }; /** * @} */ #define ELM_LIST_DATA_GET(o, sd) \ Elm_List_Data * sd = efl_data_scope_get(o, ELM_LIST_CLASS) #define ELM_LIST_DATA_GET_FROM_ITEM(it, sd) \ ELM_LIST_DATA_GET(WIDGET(it), sd) #define ELM_LIST_DATA_GET_OR_RETURN(o, ptr) \ ELM_LIST_DATA_GET(o, ptr); \ if (EINA_UNLIKELY(!ptr)) \ { \ ERR("No widget data for object %p (%s)", \ o, evas_object_type_get(o)); \ return; \ } #define ELM_LIST_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ ELM_LIST_DATA_GET(o, ptr); \ if (EINA_UNLIKELY(!ptr)) \ { \ ERR("No widget data for object %p (%s)", \ o, evas_object_type_get(o)); \ return val; \ } #define ELM_LIST_CHECK(obj) \ if (EINA_UNLIKELY(!efl_isa((obj), ELM_LIST_CLASS))) \ return #define ELM_LIST_ITEM_CHECK(it) \ ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, ); \ ELM_LIST_CHECK(it->base->widget); \ if (it->deleted) \ { \ ERR("ERROR: " #it " has been DELETED.\n"); \ return; \ } #define ELM_LIST_ITEM_CHECK_OR_RETURN(it, ...) \ ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, __VA_ARGS__); \ ELM_LIST_CHECK(it->base->widget) __VA_ARGS__; \ if (it->deleted) \ { \ ERR("ERROR: " #it " has been DELETED.\n"); \ return __VA_ARGS__; \ } #define ELM_LIST_ITEM_DATA_GET(o, sd) \ Elm_List_Item_Data* sd = efl_data_scope_get(o, ELM_LIST_ITEM_CLASS) #endif diff --git a/src/lib/elementary/meson.build b/src/lib/elementary/meson.build index 52da8ea4b5..5880680949 100644 --- a/src/lib/elementary/meson.build +++ b/src/lib/elementary/meson.build @@ -1,1082 +1,1084 @@ pub_legacy_eo_files = [ 'efl_ui_clock_legacy.eo', - 'elm_list.eo', 'elm_map.eo', 'elm_map_pan.eo', 'elm_menu.eo', 'elm_notify.eo', 'elm_panel.eo', 'elm_player.eo', 'elm_plug.eo', 'elm_popup.eo', 'elm_route.eo', 'elm_scroller.eo', 'elm_sys_notify_interface.eo', 'elm_sys_notify.eo', 'elm_sys_notify_dbus.eo', 'elm_systray.eo', 'elm_menu_item.eo', 'elm_widget_item_static_focus.eo', - 'elm_list_item.eo', 'elm_popup_item.eo', 'elm_ctxpopup_part.eo', 'elm_dayselector_part.eo', 'elm_entry_part.eo', 'elm_fileselector_entry_part.eo', 'elm_flip_part.eo', 'elm_hover_part.eo', 'elm_mapbuf_part.eo', 'elm_naviframe_part.eo', 'elm_notify_part.eo', 'elm_panel_part.eo', 'elm_player_part.eo', 'elm_popup_part.eo', 'elm_scroller_part.eo', 'elm_label_part.eo', 'elm_actionslider_part.eo', 'elm_bubble_part.eo', 'elm_fileselector_part.eo', 'elm_mapbuf.eo', 'elm_naviframe.eo', 'elm_naviframe_item.eo', 'elm_photo.eo', 'elm_prefs.eo', 'elm_segment_control.eo', 'elm_segment_control_item.eo', 'elm_separator.eo', 'elm_slideshow.eo', 'elm_slideshow_item.eo', 'elm_table.eo', 'elm_thumb.eo', ] pub_eo_file_target = [] foreach eo_file : pub_legacy_eo_files pub_eo_file_target += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.legacy.h',], depfile : eo_file + '.d', install : true, install_dir : dir_package_include, command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-gchld', '@INPUT@']) endforeach pub_eo_files = [ 'efl_ui_widget.eo', 'efl_ui_bg.eo', 'efl_ui_button.eo', 'efl_ui_calendar.eo', 'efl_ui_calendar_item.eo', 'efl_ui_check.eo', 'efl_ui_flip.eo', 'efl_ui_frame.eo', 'efl_ui_stack.eo', 'efl_ui_image.eo', 'efl_ui_image_zoomable.eo', 'efl_ui_layout.eo', 'efl_ui_layout_base.eo', 'efl_ui_nstate.eo', 'efl_ui_navigation_bar.eo', 'efl_ui_navigation_bar_part.eo', 'efl_ui_navigation_bar_part_back_button.eo', 'efl_ui_navigation_layout.eo', 'efl_ui_panes.eo', 'efl_ui_progressbar.eo', 'efl_ui_radio.eo', 'efl_ui_slider.eo', 'efl_ui_slider_interval.eo', 'efl_ui_spin.eo', 'efl_ui_spin_button.eo', 'efl_ui_panel.eo', 'efl_ui_datepicker.eo', 'efl_ui_timepicker.eo', 'efl_ui_tags.eo', 'efl_ui_video.eo', 'efl_ui_win.eo', 'efl_ui_win_inlined.eo', 'efl_ui_win_socket.eo', 'efl_ui_box.eo', 'efl_ui_box_flow.eo', 'efl_ui_box_stack.eo', 'efl_ui_table.eo', 'efl_ui_table_static.eo', 'efl_text_interactive.eo', 'efl_ui_text.eo', 'efl_ui_popup.eo', 'efl_ui_popup_part_backwall.eo', 'efl_ui_alert_popup.eo', 'efl_ui_alert_popup_part.eo', 'efl_ui_scroll_alert_popup.eo', 'efl_ui_scroll_alert_popup_part.eo', 'efl_ui_text_alert_popup.eo', 'efl_ui_text_alert_popup_part.eo', 'efl_ui_anchor_popup.eo', 'efl_ui_text_editable.eo', 'efl_ui_text_async.eo', 'efl_ui_text_factory_images.eo', 'efl_ui_text_factory_emoticons.eo', 'efl_ui_text_factory_fallback.eo', 'efl_ui_textpath.eo', 'efl_ui_l10n.eo', 'efl_ui_clock.eo', 'efl_ui_image_factory.eo', 'efl_ui_focus_manager.eo', 'efl_ui_focus_manager_calc.eo', 'efl_ui_focus_manager_sub.eo', 'efl_ui_focus_manager_root_focus.eo', 'efl_ui_focus_object.eo', 'efl_ui_focus_layer.eo', 'efl_ui_focus_composition.eo', 'efl_ui_focus_util.eo', 'efl_ui_flip_part.eo', 'efl_ui_layout_factory.eo', 'efl_ui_layout_part.eo', 'efl_ui_layout_part_box.eo', 'efl_ui_layout_part_content.eo', 'efl_ui_layout_part_text.eo', 'efl_ui_layout_part_table.eo', 'efl_ui_layout_part_bg.eo', 'efl_ui_layout_part_legacy.eo', 'efl_ui_list_view.eo', 'efl_ui_list_view_model.eo', 'efl_ui_list_view_pan.eo', 'efl_ui_item.eo', 'efl_ui_list_item.eo', 'efl_ui_list_default_item_part_icon.eo', 'efl_ui_list_default_item_part_end.eo', 'efl_ui_list_default_item.eo', 'efl_ui_list_empty_item.eo', 'efl_ui_list.eo', 'efl_ui_grid_item.eo', 'efl_ui_grid_default_item_part_icon.eo', 'efl_ui_grid_default_item_part_end.eo', 'efl_ui_grid_default_item.eo', 'efl_ui_grid.eo', 'efl_ui_panes_part.eo', 'efl_ui_progressbar_part.eo', 'elm_slider.eo', 'elm_slider_part_indicator.eo', 'efl_ui_textpath_part.eo', 'efl_ui_widget_part.eo', 'efl_ui_widget_part_bg.eo', 'efl_ui_widget_part_shadow.eo', 'efl_ui_win_part.eo', 'efl_ui_scroller.eo', 'efl_ui_scroll_manager.eo', 'efl_ui_pan.eo', 'efl_access_object.eo', 'efl_access_action.eo', 'efl_access_component.eo', 'efl_access_editable_text.eo', 'efl_access_selection.eo', 'efl_access_text.eo', 'efl_access_value.eo', 'efl_access_widget_action.eo', 'efl_access_window.eo', 'efl_ui_theme.eo', 'efl_config_global.eo', 'elm_code_widget.eo', 'efl_ui_selection.eo', 'efl_ui_dnd.eo', 'efl_ui_dnd_container.eo', 'efl_ui_focus_manager_window_root.eo', 'efl_ui_pager.eo', 'efl_page_transition.eo', 'efl_page_transition_scroll.eo', 'efl_page_indicator.eo', 'efl_page_indicator_icon.eo', 'efl_ui_tab_pager.eo', 'efl_ui_tab_bar.eo', 'efl_ui_tab_page.eo', 'efl_ui_tab_page_part_tab.eo', 'efl_ui_widget_focus_manager.eo', 'efl_ui_legacy.eo', 'efl_ui_button_legacy_part.eo', 'efl_ui_radio_legacy_part.eo', 'efl_ui_check_legacy_part.eo', 'efl_ui_progressbar_legacy_part.eo', 'elm_widget_item_container.eo', 'elm_spinner.eo', 'elm_multibuttonentry.eo', 'elm_multibuttonentry_item.eo', 'elm_multibuttonentry_part.eo', 'elm_interface_scrollable.eo', 'elm_atspi_bridge.eo', 'elm_atspi_app_object.eo', 'efl_ui_image_zoomable_pan.eo', 'elm_pan.eo', 'elm_toolbar.eo', 'elm_toolbar_item.eo', 'elm_view_list.eo', 'elm_view_form.eo', 'elm_web.eo', 'elm_widget_item.eo', 'efl_ui_text_part.eo', 'efl_ui_caching_factory.eo', 'efl_ui_widget_factory.eo', 'efl_ui_relative_layout.eo', ] foreach eo_file : pub_eo_files pub_eo_file_target += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', install : true, install_dir : dir_package_include, command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-gchd', '@INPUT@']) pub_eo_file_target += custom_target('eolian_gen_legacy_' + eo_file, input : eo_file, output : [eo_file + '.legacy.h'], depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) endforeach pub_eo_types_files = [ 'elm_general.eot', 'efl_ui.eot', 'efl_ui_list_view_types.eot', 'efl_ui_selection_types.eot', 'efl_ui_dnd_types.eot' ] foreach eo_file : pub_eo_types_files pub_eo_file_target += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', install : true, install_dir : dir_package_include, command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) endforeach priv_eo_files = [ 'efl_ui_internal_text_interactive.eo', 'efl_ui_internal_text_scroller.eo', 'efl_ui_focus_composition_adapter.eo', 'efl_ui_focus_parent_provider.eo', 'efl_ui_focus_parent_provider_standard.eo', 'efl_ui_focus_parent_provider_gen.eo', 'efl_ui_state_model.eo', 'efl_ui_selection_manager.eo', 'efl_datetime_manager.eo', 'efl_ui_list_view_precise_layouter.eo', 'efl_ui_list_view_relayout.eo', 'efl_ui_size_model.eo', 'efl_ui_homogeneous_model.eo', 'efl_ui_exact_model.eo', 'efl_ui_average_model.eo', ] priv_eo_file_target = [] foreach eo_file : priv_eo_files priv_eo_file_target += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-gchd', '@INPUT@']) endforeach eolian_include_directories += ['-I', meson.current_source_dir()] elementary_headers_unstable = [ 'elm_gen_common.h', 'elm_atspi_bridge.h', 'efl_access_object.h', 'efl_access_text.h', 'efl_access_widget_action.h', 'efl_access_window.h', 'elm_interface_fileselector.h', 'elm_interface_scrollable.h', 'elm_interfaces.h', 'elm_widget.h', 'elm_widget_actionslider.h', 'elm_widget_box.h', 'elm_widget_bubble.h', 'efl_ui_button_private.h', 'efl_ui_bg_private.h', 'elm_widget_calendar.h', 'efl_ui_calendar_private.h', 'efl_ui_check_private.h', 'elm_widget_clock.h', 'elm_widget_colorselector.h', 'elm_widget_conform.h', 'elm_widget_container.h', 'elm_widget_combobox.h', 'elm_widget_ctxpopup.h', 'elm_widget_dayselector.h', 'elm_widget_diskselector.h', 'elm_widget_entry.h', 'elm_widget_fileselector.h', 'elm_widget_fileselector_button.h', 'elm_widget_fileselector_entry.h', 'efl_ui_widget_flip.h', 'elm_widget_flipselector.h', 'efl_ui_widget_frame.h', 'efl_ui_stack_private.h', 'elm_widget_gengrid.h', 'elm_widget_genlist.h', 'elm_widget_glview.h', 'elm_widget_grid.h', 'elm_widget_hover.h', 'elm_widget_hoversel.h', 'elm_widget_icon.h', 'efl_ui_widget_image.h', 'efl_ui_popup_private.h', 'efl_ui_alert_popup_private.h', 'efl_ui_scroll_alert_popup_private.h', 'efl_ui_text_alert_popup_private.h', 'efl_ui_anchor_popup_private.h', 'elm_widget_index.h', 'elm_widget_inwin.h', 'elm_widget_label.h', 'elm_widget_layout.h', 'elm_widget_list.h', 'elm_widget_map.h', 'elm_widget_mapbuf.h', 'elm_widget_menu.h', 'elm_widget_multibuttonentry.h', 'elm_widget_naviframe.h', 'efl_ui_navigation_bar_private.h', 'efl_ui_navigation_layout_private.h', 'elm_widget_notify.h', 'elm_widget_panel.h', 'efl_ui_panes_private.h', 'elm_widget_photo.h', 'efl_ui_image_zoomable_private.h', 'elm_widget_player.h', 'elm_widget_plug.h', 'elm_widget_popup.h', 'elm_widget_prefs.h', 'efl_ui_progressbar_private.h', 'efl_ui_radio_private.h', 'elm_widget_route.h', 'elm_widget_scroller.h', 'elm_widget_segment_control.h', 'elm_widget_separator.h', 'elm_widget_slider.h', 'efl_ui_slider_private.h', 'efl_ui_slider_interval_private.h', 'elm_widget_slideshow.h', 'elm_widget_spinner.h', 'efl_ui_spin_private.h', 'efl_ui_spin_button_private.h', 'efl_ui_panel_private.h', 'efl_ui_datepicker_private.h', 'efl_ui_timepicker_private.h', 'efl_ui_tags_private.h', 'elm_widget_table.h', 'elm_widget_thumb.h', 'elm_widget_toolbar.h', 'efl_ui_video_private.h', 'efl_ui_item_private.h', 'efl_ui_list_item_private.h', 'efl_ui_list_private.h', 'efl_ui_grid_item_private.h', 'efl_ui_grid_private.h', 'efl_ui_list_view_private.h', 'efl_ui_list_view_seg_array.h', 'elm_widget_web.h', 'efl_ui_clock.h', 'elm_code.h', 'elm_code_widget_legacy.h', 'elm_code_widget_selection.h', 'elm_code_diff_widget.h', 'elm_code_common.h', 'elm_code_line.h', 'elm_code_text.h', 'elm_code_indent.h', 'elm_code_file.h', 'elm_code_parse.h', 'elm_code_syntax.h', 'efl_ui_widget_scroller.h', 'efl_ui_widget_scroll_manager.h', 'efl_ui_widget_pan.h', 'efl_ui_nstate_private.h', 'Efl_Ui.h', 'efl_ui_widget_pager.h', 'efl_page_transition.h', 'efl_page_transition_scroll.h', 'efl_page_indicator.h', 'efl_page_indicator_icon.h', 'efl_ui_tab_pager_private.h', 'efl_ui_tab_bar_private.h', 'efl_ui_tab_page_private.h', 'efl_ui_relative_layout_private.h' ] elementary_pub_headers = [ 'elc_ctxpopup.h', 'elc_ctxpopup_legacy.h', 'elc_combobox.h', 'elc_combobox_legacy.h', 'elc_fileselector.h', 'elc_fileselector_legacy.h', 'elc_fileselector_common.h', 'elc_fileselector_button.h', 'elc_fileselector_button_legacy.h', 'elc_fileselector_entry.h', 'elc_fileselector_entry_legacy.h', 'elc_hoversel.h', 'elc_hoversel_legacy.h', 'elc_multibuttonentry.h', 'elc_multibuttonentry_eo.h', 'elc_multibuttonentry_legacy.h', 'elc_multibuttonentry_common.h', 'elc_naviframe.h', 'elc_naviframe_legacy.h', 'elc_naviframe_common.h', 'elc_popup.h', 'elc_popup_legacy.h', 'elm_access.h', 'elm_actionslider.h', 'elm_actionslider_legacy.h', 'elm_app.h', 'elm_atspi_app_object.h', 'elm_authors.h', 'elm_bg.h', 'elm_bg_legacy.h', 'elm_box.h', 'elm_box_legacy.h', 'elm_box_common.h', 'elm_bubble.h', 'elm_bubble_legacy.h', 'elm_button.h', 'efl_ui_widget_common.h', 'efl_ui_button_eo.h', 'elm_button_legacy.h', 'elm_cache.h', 'elm_calendar.h', 'elm_calendar_legacy.h', 'elm_calendar_common.h', 'efl_ui_calendar.h', 'elm_check.h', 'efl_ui_check_eo.h', 'elm_check_legacy.h', 'elm_clock.h', 'elm_clock_legacy.h', 'elm_cnp.h', 'elm_colorselector.h', 'elm_colorselector_legacy.h', 'elm_colorselector_common.h', 'elm_color_class.h', 'elm_config.h', 'elm_conform.h', 'elm_conform_legacy.h', 'elm_cursor.h', 'elm_datetime.h', 'elm_dayselector.h', 'elm_dayselector_legacy.h', 'elm_debug.h', 'elm_deprecated.h', 'elm_diskselector.h', 'elm_diskselector_common.h', 'elm_diskselector_legacy.h', 'elm_entry.h', 'elm_entry_common.h', 'elm_entry_eo.h', 'elm_entry_legacy.h', 'elm_finger.h', 'elm_flip.h', 'efl_ui_flip_eo.h', 'efl_ui_flip_legacy.h', 'elm_flipselector.h', 'elm_flipselector_legacy.h', 'elm_focus.h', 'elm_focus_item.h', 'elm_font.h', 'elm_frame.h', 'efl_ui_frame_eo.h', 'efl_ui_frame_legacy.h', 'elm_gen.h', 'elm_general.h', 'elm_gengrid.h', 'elm_gengrid_common.h', 'elm_gengrid_legacy.h', 'elm_genlist.h', 'elm_genlist_common.h', 'elm_genlist_legacy.h', 'elm_gesture_layer.h', 'elm_gesture_layer_common.h', 'elm_gesture_layer_legacy.h', 'elm_getting_started.h', 'elm_glview.h', 'elm_glview_common.h', 'elm_glview_legacy.h', 'elm_grid.h', 'elm_grid_legacy.h', 'elm_hover.h', 'elm_hover_legacy.h', 'elm_icon.h', 'elm_icon_legacy.h', 'elm_image.h', 'elm_image_eo.h', 'elm_image_legacy.h', 'elm_index.h', 'elm_index_legacy.h', 'elm_inwin.h', 'elm_inwin_legacy.h', 'elm_label.h', 'elm_label_legacy.h', 'elm_layout.h', 'elm_layout_common.h', 'elm_layout_legacy.h', 'elm_list.h', 'elm_list_legacy.h', 'elm_macros.h', 'elm_map.h', 'elm_map_common.h', 'elm_map_legacy.h', 'elm_mapbuf.h', 'elm_mapbuf_legacy.h', 'elm_menu.h', 'elm_menu_legacy.h', 'elm_mirroring.h', 'elm_need.h', 'elm_notify.h', 'elm_notify_common.h', 'elm_notify_legacy.h', 'efl_ui_nstate.h', 'elm_object.h', 'elm_object_item.h', 'elm_panel.h', 'elm_panel_common.h', 'elm_panel_legacy.h', 'elm_panes.h', 'efl_ui_panes_eo.h', 'elm_panes_legacy.h', 'elm_photo.h', 'elm_photo_legacy.h', 'elm_photocam.h', 'efl_ui_image_zoomable_eo.h', 'elm_photocam_legacy.h', 'elm_plug.h', 'elm_plug_legacy.h', 'elm_prefs.h', 'elm_prefs_common.h', 'elm_prefs_legacy.h', 'elm_prefs_data.h', 'elm_progressbar.h', 'elm_progressbar_common.h', 'efl_ui_progressbar_eo.h', 'elm_progressbar_legacy.h', 'elm_radio.h', 'efl_ui_radio_eo.h', 'elm_radio_legacy.h', 'elm_route.h', 'elm_route_legacy.h', 'elm_scale.h', 'elm_scroll.h', 'elm_scroller.h', 'elm_scroller_legacy.h', 'elm_segment_control.h', 'elm_segment_control_legacy.h', 'elm_separator.h', 'elm_separator_legacy.h', 'elm_slider.h', 'elm_slider_common.h', 'elm_slider_legacy.h', 'elm_slideshow.h', 'elm_slideshow_common.h', 'elm_slideshow_legacy.h', 'elm_spinner.h', 'elm_spinner_legacy.h', 'elm_store.h', 'elm_systray.h', 'elm_systray_common.h', 'elm_systray_watcher.h', 'elm_sys_notify.h', 'elm_table.h', 'elm_table_legacy.h', 'elm_theme.h', 'elm_thumb.h', 'elm_thumb_common.h', 'elm_thumb_legacy.h', 'elm_textpath.h', 'elm_textpath_legacy.h', 'elm_toolbar.h', 'elm_toolbar_common.h', 'elm_toolbar_eo.h', 'elm_toolbar_legacy.h', 'elm_tooltip.h', 'elm_transit.h', 'efl_ui_video.h', 'efl_ui_video_eo.h', 'efl_ui_video_legacy.h', 'elm_view_list.h', 'elm_view_form.h', 'elm_web.h', 'elm_web_common.h', 'elm_web_eo.h', 'elm_web_legacy.h', 'elm_win.h', 'elm_win_common.h', 'elm_win_eo.h', 'elm_win_legacy.h', 'elm_helper.h', 'elm_part_helper.h', 'efl_ui_bg_eo.legacy.h', 'efl_ui_bg_legacy_eo.h', 'efl_ui_bg_legacy_eo.legacy.h', 'efl_ui_button_eo.legacy.h', 'efl_ui_button_legacy_eo.h', 'efl_ui_button_legacy_eo.legacy.h', 'efl_ui_check_eo.legacy.h', 'efl_ui_check_legacy_eo.h', 'efl_ui_check_legacy_eo.legacy.h', 'efl_ui_flip_eo.legacy.h', 'efl_ui_flip_legacy_eo.h', 'efl_ui_flip_legacy_eo.legacy.h', 'efl_ui_frame_eo.legacy.h', 'efl_ui_frame_legacy_eo.h', 'efl_ui_frame_legacy_eo.legacy.h', 'efl_ui_image_legacy_eo.h', 'efl_ui_image_legacy_eo.legacy.h', 'efl_ui_image_zoomable_eo.legacy.h', 'efl_ui_image_zoomable_legacy_eo.h', 'efl_ui_image_zoomable_legacy_eo.legacy.h', 'efl_ui_layout_legacy_eo.h', 'efl_ui_layout_legacy_eo.legacy.h', 'efl_ui_panes_eo.legacy.h', 'efl_ui_panes_legacy_eo.h', 'efl_ui_panes_legacy_eo.legacy.h', 'efl_ui_progressbar_legacy_eo.h', 'efl_ui_progressbar_legacy_eo.legacy.h', 'efl_ui_radio_eo.legacy.h', 'efl_ui_radio_legacy_eo.h', 'efl_ui_radio_legacy_eo.legacy.h', 'efl_ui_textpath_eo.legacy.h', 'efl_ui_textpath_legacy_eo.h', 'efl_ui_textpath_legacy_eo.legacy.h', 'efl_ui_video_eo.legacy.h', 'efl_ui_video_legacy_eo.h', 'efl_ui_video_legacy_eo.legacy.h', 'efl_ui_widget_eo.legacy.h', 'efl_ui_win_inlined_legacy_eo.h', 'efl_ui_win_inlined_legacy_eo.legacy.h', 'efl_ui_win_legacy_eo.h', 'efl_ui_win_legacy_eo.legacy.h', 'efl_ui_win_socket_legacy_eo.h', 'efl_ui_win_socket_legacy_eo.legacy.h', 'elm_access_eo.h', 'elm_access_eo.legacy.h', 'elm_actionslider_eo.h', 'elm_actionslider_eo.legacy.h', 'elm_box_eo.h', 'elm_box_eo.legacy.h', 'elm_bubble_eo.h', 'elm_bubble_eo.legacy.h', 'elm_calendar_eo.h', 'elm_calendar_eo.legacy.h', 'elm_calendar_item_eo.h', 'elm_calendar_item_eo.legacy.h', 'elm_clock_eo.h', 'elm_clock_eo.legacy.h', 'elm_code_widget_eo.legacy.h', 'elm_code_widget_legacy_eo.h', 'elm_code_widget_legacy_eo.legacy.h', 'elm_color_item_eo.h', 'elm_color_item_eo.legacy.h', 'elm_colorselector_eo.h', 'elm_colorselector_eo.legacy.h', 'elm_conformant_eo.h', 'elm_conformant_eo.legacy.h', 'elm_ctxpopup_eo.h', 'elm_ctxpopup_eo.legacy.h', 'elm_ctxpopup_item_eo.h', 'elm_ctxpopup_item_eo.legacy.h', 'elm_dayselector_eo.h', 'elm_dayselector_eo.legacy.h', 'elm_dayselector_item_eo.h', 'elm_dayselector_item_eo.legacy.h', 'elm_diskselector_eo.h', 'elm_diskselector_eo.legacy.h', 'elm_diskselector_item_eo.h', 'elm_diskselector_item_eo.legacy.h', 'elm_entry_eo.h', 'elm_entry_eo.legacy.h', 'elm_fileselector_button_eo.h', 'elm_fileselector_button_eo.legacy.h', 'elm_fileselector_entry_eo.h', 'elm_fileselector_entry_eo.legacy.h', 'elm_fileselector_eo.h', 'elm_fileselector_eo.legacy.h', 'elm_flipselector_eo.h', 'elm_flipselector_eo.legacy.h', 'elm_flipselector_item_eo.h', 'elm_flipselector_item_eo.legacy.h', 'elm_gengrid_eo.h', 'elm_gengrid_eo.legacy.h', 'elm_gengrid_item_eo.h', 'elm_gengrid_item_eo.legacy.h', 'elm_gengrid_pan_eo.h', 'elm_gengrid_pan_eo.legacy.h', 'elm_genlist_eo.h', 'elm_genlist_eo.legacy.h', 'elm_genlist_item_eo.h', 'elm_genlist_item_eo.legacy.h', 'elm_genlist_pan_eo.h', 'elm_genlist_pan_eo.legacy.h', 'elm_gesture_layer_eo.h', 'elm_gesture_layer_eo.legacy.h', 'elm_glview_eo.h', 'elm_glview_eo.legacy.h', 'elm_grid_eo.h', 'elm_grid_eo.legacy.h', 'elm_hover_eo.h', 'elm_hover_eo.legacy.h', 'elm_hoversel_eo.h', 'elm_hoversel_eo.legacy.h', 'elm_hoversel_item_eo.h', 'elm_hoversel_item_eo.legacy.h', 'elm_icon_eo.h', 'elm_icon_eo.legacy.h', 'elm_index_eo.h', 'elm_index_eo.legacy.h', 'elm_index_item_eo.h', 'elm_index_item_eo.legacy.h', 'elm_interface_fileselector_eo.h', 'elm_interface_fileselector_eo.legacy.h', 'elm_inwin_eo.h', 'elm_inwin_eo.legacy.h', 'elm_label_eo.h', 'elm_label_eo.legacy.h', + 'elm_list_eo.h', + 'elm_list_eo.legacy.h', + 'elm_list_item_eo.h', + 'elm_list_item_eo.legacy.h', ] elementary_header_src = [ 'Elementary.h', 'Elementary_Cursor.h' ] + elementary_pub_headers + elementary_headers_unstable elementary_src = [ 'elm_priv.h', 'elementary_config.h', 'els_box.h', 'elc_ctxpopup.c', 'elc_fileselector.c', 'elc_fileselector_button.c', 'elc_fileselector_entry.c', 'elc_hoversel.c', 'elc_multibuttonentry.c', 'elc_naviframe.c', 'efl_ui_navigation_bar.c', 'efl_ui_navigation_layout.c', 'elc_player.c', 'elc_popup.c', 'elc_scrolled_entry.c', 'elm_access.c', 'elm_actionslider.c', 'elm_atspi_app_object.c', 'elm_atspi_bridge.c', 'efl_ui_legacy.c', 'efl_ui_bg.c', 'elm_box.c', 'elm_bubble.c', 'efl_ui_button.c', 'elm_calendar.c', 'efl_ui_calendar.c', 'efl_ui_check.c', 'elm_clock.c', 'elm_code_line.c', 'elm_code_text.c', 'elm_code_indent.c', 'elm_code_file.c', 'elm_code_parse.c', 'elm_code_syntax.c', 'elm_code_widget_selection.c', 'elm_code_widget.c', 'elm_code_diff_widget.c', 'elm_code.c', 'elm_code_private.h', 'elm_code_widget_private.h', 'elm_colorselector.c', 'elm_color_class.c', 'elc_combobox.c', 'elm_config.c', 'elm_conform.c', 'elm_datetime.c', 'elm_dayselector.c', 'elm_dbus_menu.c', 'elm_diskselector.c', 'elm_entry.c', 'efl_ui_flip.c', 'efl_ui_internal_text_interactive.c', 'efl_ui_internal_text_interactive.h', 'efl_ui_internal_text_scroller.c', 'efl_ui_internal_text_scroller.h', 'elm_flipselector.c', 'elm_font.c', 'efl_ui_frame.c', 'efl_ui_stack.c', 'elm_gengrid.c', 'elm_genlist.c', 'elm_gesture_layer.c', 'elm_gesture_layer_extra_gestures.c', 'elm_glview.c', 'elm_grid.c', 'elm_hover.c', 'elm_icon.c', 'efl_ui_image.c', 'elm_index.c', 'efl_access_object.c', 'efl_access_action.c', 'efl_access_component.c', 'efl_access_editable_text.c', 'efl_access_selection.c', 'efl_access_text.c', 'efl_access_value.c', 'efl_access_widget_action.c', 'efl_access_window.c', 'elm_interface_fileselector.c', 'elm_interface_scrollable.c', 'elm_inwin.c', 'elm_label.c', 'efl_ui_layout.c', 'efl_ui_layout_pack.c', 'elm_list.c', 'elm_main.c', 'elm_map.c', 'elm_mapbuf.c', 'elm_menu.c', 'elm_module.c', 'elm_notify.c', 'efl_ui_nstate.c', 'elm_panel.c', 'efl_ui_panes.c', 'elm_photo.c', 'efl_ui_image_zoomable.c', 'elm_plug.c', 'elm_prefs.c', 'elm_prefs_data.c', 'efl_ui_progressbar.c', 'efl_ui_radio.c', 'elm_route.c', 'elm_scroller.c', 'elm_segment_control.c', 'elm_separator.c', 'elm_slider.c', 'efl_ui_slider.c', 'efl_ui_slider_interval.c', 'efl_ui_spin.c', 'efl_ui_spin_button.c', 'efl_ui_panel.c', 'efl_ui_datepicker.c', 'efl_ui_timepicker.c', 'efl_ui_tags.c', 'elm_slideshow.c', 'elm_spinner.c', 'elm_store.c', 'elm_systray.c', 'elm_systray_watcher.c', 'elm_sys_notify_interface.c', 'elm_sys_notify.c', 'elm_sys_notify_dbus.c', 'elm_table.c', 'elm_theme.c', 'elm_thumb.c', 'elm_toolbar.c', 'elm_transit.c', 'elm_util.c', 'efl_ui_video.c', 'elm_view_list.c', 'elm_view_form.c', 'elm_web2.c', 'efl_ui_widget.c', 'efl_ui_widget_common.c', 'efl_ui_win.c', 'efl_ui_win_inlined.c', 'efl_ui_win_socket.c', 'elm_helper.c', 'els_box.c', 'els_cursor.c', 'els_tooltip.c', 'elu_ews_wm.c', 'efl_ui_container_layout.c', 'efl_ui_container_layout.h', 'efl_ui_box.c', 'efl_ui_box_flow.c', 'efl_ui_box_stack.c', 'efl_ui_box_layout.c', 'efl_ui_box_private.h', 'efl_ui_popup.c', 'efl_ui_alert_popup.c', 'efl_ui_scroll_alert_popup.c', 'efl_ui_text_alert_popup.c', 'efl_ui_anchor_popup.c', 'efl_ui_table.c', 'efl_ui_table_static.c', 'efl_ui_table_layout.c', 'efl_ui_table_private.h', 'efl_ui_text.c', 'efl_ui_text_factory_images.c', 'efl_ui_text_factory_emoticons.c', 'efl_ui_text_factory_fallback.c', 'efl_ui_clock.c', 'efl_ui_clock_private.h', 'efl_ui_image_factory.c', 'efl_ui_focus_manager.c', 'efl_ui_focus_manager_calc.c', 'efl_ui_focus_manager_sub.c', 'efl_ui_focus_object.c', 'efl_ui_focus_manager_root_focus.c', 'efl_ui_textpath.c', 'efl_ui_focus_layer.c', 'efl_ui_focus_composition.c', 'efl_ui_focus_parent_provider.c', 'efl_ui_focus_parent_provider_standard.c', 'efl_ui_focus_parent_provider_gen.c', 'efl_ui_focus_util.c', 'elm_widget_item_static_focus.c', 'efl_ui_item.c', 'efl_ui_list_item.c', 'efl_ui_list_default_item.c', 'efl_ui_list_empty_item.c', 'efl_ui_list.c', 'efl_ui_grid_item.c', 'efl_ui_grid_default_item.c', 'efl_ui_grid.c', 'efl_ui_list_view.c', 'efl_ui_list_view_precise_layouter.c', 'efl_ui_list_view_seg_array.c', 'efl_ui_layout_factory.c', 'efl_ui_scroller.c', 'efl_ui_scroll_manager.c', 'efl_ui_pan.c', 'efl_ui_selection_manager.c', 'efl_ui_selection_manager_private.h', 'efl_ui_selection.c', 'efl_datetime_manager.c', 'efl_ui_dnd.c', 'elm_focus_legacy.c', 'efl_ui_pager.c', 'efl_page_transition.c', 'efl_page_transition_scroll.c', 'efl_page_indicator.c', 'efl_page_indicator_icon.c', 'efl_ui_focus_graph.h', 'efl_ui_focus_graph.c', 'efl_ui_tab_pager.c', 'efl_ui_tab_bar.c', 'efl_ui_tab_page.c', 'efl_ui_widget_focus_manager.c', 'efl_ui_caching_factory.c', 'efl_ui_widget_factory.c', 'efl_ui_size_model.c', 'efl_ui_homogeneous_model.c', 'efl_ui_exact_model.c', 'efl_ui_average_model.c', 'efl_ui_relative_layout.c' ] elementary_deps = [emile, eo, efl, edje, ethumb, ethumb_client, emotion, ecore_imf, ecore_con, eldbus, efreet, efreet_mime, efreet_trash, eio, atspi, dl, intl] elementary_pub_deps = [eina, eet, evas, ecore, ecore_evas, ecore_file, ecore_input, ecore_imf, ecore_con, edje, eldbus, efreet, efreet_mime, efreet_trash, ethumb_client, efl, elocation] elm_options = configuration_data() config_h.set_quoted('ELM_TOP_BUILD_DIR', meson.build_root()) config_h.set_quoted('MODULES_PATH', join_paths(dir_lib, 'modules')) config_h.set_quoted('ELEMENTARY_BASE_DIR', get_option('elementary-base-dir')) config_h.set_quoted('ICON_DIR', join_paths(dir_lib, 'icons')) if sys_windows == false elm_options.set('ELM_UNIX', '1') else elm_options.set('DLL_EXPORT', '1') endif elm_options.set('ELM_ELOCATION', '1') elm_options.set('ELM_EFREET', '1') if config_h.has('HAVE_ALLOCA_H') elm_options.set('ELM_ALLOCA_H', '1') endif if config_h.has('HAVE_LIBINTL_H') elm_options.set('ELM_LIBINTL_H', '1') endif if config_h.has('HAVE_DIRENT_H') elm_options.set('ELM_DIRENT_H', '1') endif if get_option('x11') config_h.set('HAVE_ELEMENTARY_X', '1') elementary_deps += ecore_x endif if get_option('wl') config_h.set('HAVE_ELEMENTARY_WL2', '1') elementary_deps += ecore_wl2 endif if get_option('drm') config_h.set('HAVE_ELEMENTARY_DRM', '1') elementary_deps += ecore_drm2 endif if get_option('cocoa') config_h.set('HAVE_ELEMENTARY_COCOA', '1') elementary_deps += ecore_cocoa endif c = configure_file( output: 'Elementary_Options.h', install : true, install_dir : dir_package_include, configuration: elm_options) elm_package_c_args = package_c_args + ['-DELEMENTARY_BUILD=1'] elementary_lib = library('elementary', elementary_src, pub_eo_file_target, priv_eo_file_target, c, dependencies: elementary_pub_deps + elementary_deps, include_directories : config_dir + [include_directories('.')] + [include_directories(join_paths('..', '..', '..'))] + [ecore_evas_wayland_engine_include_dir], install: true, c_args : elm_package_c_args, version : meson.project_version() ) elementary = declare_dependency( include_directories: [include_directories('.')], link_with: elementary_lib, sources : pub_eo_file_target + priv_eo_file_target, dependencies: elementary_pub_deps, ) install_data(pub_eo_files + pub_eo_types_files, install_dir: join_paths(eolian_include_dir, package_version_name) ) install_headers(elementary_header_src, install_dir : dir_package_include, ) elementary_config_dir = include_directories('.') package_pc_variables = ['themes='+join_paths(dir_data, package_name, 'themes')]