summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/ecore/Ecore_Common.h4
-rw-r--r--src/lib/ecore/ecore_exe_posix.c21
-rw-r--r--src/lib/ecore/ecore_internal.h33
-rw-r--r--src/lib/ecore/efl_accelerate_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_boolean_model.c6
-rw-r--r--src/lib/ecore/efl_bounce_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_core_proc_env.c6
-rw-r--r--src/lib/ecore/efl_cubic_bezier_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_decelerate_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_exe.c12
-rw-r--r--src/lib/ecore/efl_filter_model.c59
-rw-r--r--src/lib/ecore/efl_linear_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_loop_model.c36
-rw-r--r--src/lib/ecore/efl_loop_model.eo1
-rw-r--r--src/lib/ecore/efl_sinusoidal_interpolator.eo4
-rw-r--r--src/lib/ecore/efl_spring_interpolator.eo4
-rw-r--r--src/lib/ecore_con/Ecore_Con.h6
-rw-r--r--src/lib/ecore_con/efl_net_control-connman.c9
-rw-r--r--src/lib/ecore_con/efl_net_control_manager.eo2
-rw-r--r--src/lib/ecore_con/efl_net_dialer_websocket.c6
-rw-r--r--src/lib/ecore_con/efl_net_server_unix.c105
-rw-r--r--src/lib/ecore_con/efl_net_ssl_conn-openssl.c18
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.c2
-rw-r--r--src/lib/ecore_imf/Ecore_IMF.h24
-rw-r--r--src/lib/ecore_wl2/Ecore_Wl2.h535
-rw-r--r--src/lib/ecore_wl2/ecore_wl2.c2
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_input.c51
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_internal.h467
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_private.h1
-rw-r--r--src/lib/ecore_wl2/ecore_wl2_window.c30
-rw-r--r--src/lib/ecore_x/Ecore_X.h15
-rw-r--r--src/lib/ecore_x/ecore_x.c28
-rw-r--r--src/lib/ecore_x/ecore_x_events.c182
-rw-r--r--src/lib/ecore_x/ecore_x_fixes.c99
-rw-r--r--src/lib/ecore_x/ecore_x_gesture.c108
-rw-r--r--src/lib/ecore_x/ecore_x_private.h13
-rw-r--r--src/lib/ecore_x/ecore_x_vsync.c2
-rw-r--r--src/lib/ecore_x/ecore_x_xi2.c5
-rw-r--r--src/lib/ecore_x/meson.build8
-rw-r--r--src/lib/ector/software/ector_renderer_software_gradient_linear.c20
-rw-r--r--src/lib/ector/software/ector_renderer_software_gradient_radial.c17
-rw-r--r--src/lib/ector/software/ector_renderer_software_shape.c55
-rw-r--r--src/lib/ector/software/ector_software_buffer.c2
-rw-r--r--src/lib/ector/software/ector_software_gradient.c22
-rw-r--r--src/lib/ector/software/ector_software_gradient.h4
-rw-r--r--src/lib/ector/software/ector_software_private.h2
-rw-r--r--src/lib/edje/Edje_Common.h8
-rw-r--r--src/lib/edje/Edje_Legacy.h38
-rw-r--r--src/lib/edje/edje_cache.c11
-rw-r--r--src/lib/edje/edje_calc.c183
-rw-r--r--src/lib/edje/edje_data.c10
-rw-r--r--src/lib/edje/edje_entry.c44
-rw-r--r--src/lib/edje/edje_legacy.c47
-rw-r--r--src/lib/edje/edje_load.c24
-rw-r--r--src/lib/edje/edje_lua.c20
-rw-r--r--src/lib/edje/edje_match.c10
-rw-r--r--src/lib/edje/edje_multisense.c2
-rw-r--r--src/lib/edje/edje_part_text.c108
-rw-r--r--src/lib/edje/edje_private.h49
-rw-r--r--src/lib/edje/edje_program.c83
-rw-r--r--src/lib/edje/edje_smart.c7
-rw-r--r--src/lib/edje/edje_textblock.c135
-rw-r--r--src/lib/edje/edje_textblock_styles.c160
-rw-r--r--src/lib/edje/edje_util.c176
-rw-r--r--src/lib/edje/efl_canvas_layout_part_text.eo42
-rw-r--r--src/lib/eet/Eet.h23
-rw-r--r--src/lib/eeze/eeze_sensor.c1
-rw-r--r--src/lib/efl/Efl.h98
-rw-r--r--src/lib/efl/interfaces/efl_config.eo3
-rw-r--r--src/lib/efl/interfaces/efl_gfx_arrangement.eo2
-rw-r--r--src/lib/efl/interfaces/efl_gfx_path.c3
-rw-r--r--src/lib/efl/interfaces/efl_gfx_types.eot22
-rw-r--r--src/lib/efl/interfaces/efl_input_text.eo262
-rw-r--r--src/lib/efl/interfaces/efl_interfaces_main.c4
-rw-r--r--src/lib/efl/interfaces/efl_interpolator.eo4
-rw-r--r--src/lib/efl/interfaces/efl_model.eo19
-rw-r--r--src/lib/efl/interfaces/efl_player.eo53
-rw-r--r--src/lib/efl/interfaces/efl_text_font.eo172
-rw-r--r--src/lib/efl/interfaces/efl_text_font_properties.eo182
-rw-r--r--src/lib/efl/interfaces/efl_text_format.eo119
-rw-r--r--src/lib/efl/interfaces/efl_text_markup.eo3
-rw-r--r--src/lib/efl/interfaces/efl_text_style.eo295
-rw-r--r--src/lib/efl/interfaces/efl_text_types.eot17
-rw-r--r--src/lib/efl/interfaces/efl_types.eot4
-rw-r--r--src/lib/efl/interfaces/efl_ui_draggable.eo12
-rw-r--r--src/lib/efl/interfaces/efl_ui_range_display.eo2
-rw-r--r--src/lib/efl/interfaces/efl_ui_scrollbar.eo12
-rw-r--r--src/lib/efl/interfaces/efl_ui_text_selectable.eo13
-rw-r--r--src/lib/efl/interfaces/meson.build4
-rw-r--r--src/lib/efl_mono/efl_custom_exports_mono.c36
-rw-r--r--src/lib/efl_mono/efl_mono_accessors.c93
-rw-r--r--src/lib/efl_wl/efl_wl.c1
-rw-r--r--src/lib/efreet/efreet_cache.c2
-rw-r--r--src/lib/eina/Eina.h1
-rw-r--r--src/lib/eina/eina_accessor.c38
-rw-r--r--src/lib/eina/eina_accessor.h36
-rw-r--r--src/lib/eina/eina_cow.h18
-rw-r--r--src/lib/eina/eina_error.h9
-rw-r--r--src/lib/eina/eina_file_common.c4
-rw-r--r--src/lib/eina/eina_hash.c3
-rw-r--r--src/lib/eina/eina_hash.h4
-rw-r--r--src/lib/eina/eina_inarray.c2
-rw-r--r--src/lib/eina/eina_inline_array.x1
-rw-r--r--src/lib/eina/eina_inline_range.x82
-rw-r--r--src/lib/eina/eina_inline_str.x20
-rw-r--r--src/lib/eina/eina_inline_value.x11
-rw-r--r--src/lib/eina/eina_inlist.h8
-rw-r--r--src/lib/eina/eina_iterator.c59
-rw-r--r--src/lib/eina/eina_iterator.h18
-rw-r--r--src/lib/eina/eina_list.h40
-rw-r--r--src/lib/eina/eina_matrix.c206
-rw-r--r--src/lib/eina/eina_matrix.h64
-rw-r--r--src/lib/eina/eina_promise.c70
-rw-r--r--src/lib/eina/eina_promise.h32
-rw-r--r--src/lib/eina/eina_range.h116
-rw-r--r--src/lib/eina/eina_rbtree.c12
-rw-r--r--src/lib/eina/eina_types.h16
-rw-r--r--src/lib/eina/meson.build2
-rw-r--r--src/lib/eio/efl_io_manager.eo4
-rw-r--r--src/lib/eldbus/eldbus_service.c5
-rw-r--r--src/lib/elementary/Efl_Ui.h14
-rw-r--r--src/lib/elementary/Elementary.h6
-rw-r--r--src/lib/elementary/Elementary_Options.h.in4
-rw-r--r--src/lib/elementary/efl_datetime_manager.c8
-rw-r--r--src/lib/elementary/efl_text_interactive.eo70
-rw-r--r--src/lib/elementary/efl_ui.eot14
-rw-r--r--src/lib/elementary/efl_ui_alert_popup.eo2
-rw-r--r--src/lib/elementary/efl_ui_alert_popup_part_title.eo7
-rw-r--r--src/lib/elementary/efl_ui_animation_view.c803
-rw-r--r--src/lib/elementary/efl_ui_animation_view.eo313
-rw-r--r--src/lib/elementary/efl_ui_animation_view_eo.legacy.c162
-rw-r--r--src/lib/elementary/efl_ui_animation_view_private.h42
-rw-r--r--src/lib/elementary/efl_ui_caching_factory.eo3
-rw-r--r--src/lib/elementary/efl_ui_clock.c6
-rw-r--r--src/lib/elementary/efl_ui_collection.c28
-rw-r--r--src/lib/elementary/efl_ui_collection.eo7
-rw-r--r--src/lib/elementary/efl_ui_collection_view.c281
-rw-r--r--src/lib/elementary/efl_ui_collection_view.eo6
-rw-r--r--src/lib/elementary/efl_ui_datepicker.c4
-rw-r--r--src/lib/elementary/efl_ui_exact_model.c21
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.c8
-rw-r--r--src/lib/elementary/efl_ui_focus_manager.eo8
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.c105
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.eo19
-rw-r--r--src/lib/elementary/efl_ui_format.c4
-rw-r--r--src/lib/elementary/efl_ui_image.c27
-rw-r--r--src/lib/elementary/efl_ui_image.eo6
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable.c48
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable.eo7
-rw-r--r--src/lib/elementary/efl_ui_internal_text_interactive.c1407
-rw-r--r--src/lib/elementary/efl_ui_internal_text_interactive.eo28
-rw-r--r--src/lib/elementary/efl_ui_internal_text_scroller.c13
-rw-r--r--src/lib/elementary/efl_ui_internal_text_scroller.eo6
-rw-r--r--src/lib/elementary/efl_ui_item.c12
-rw-r--r--src/lib/elementary/efl_ui_item.eo6
-rw-r--r--src/lib/elementary/efl_ui_layout.c69
-rw-r--r--src/lib/elementary/efl_ui_layout_base.eo16
-rw-r--r--src/lib/elementary/efl_ui_layout_factory.eo4
-rw-r--r--src/lib/elementary/efl_ui_multi_selectable.eo5
-rw-r--r--src/lib/elementary/efl_ui_multi_selectable_index_range.eo17
-rw-r--r--src/lib/elementary/efl_ui_multi_selectable_object_range.eo5
-rw-r--r--src/lib/elementary/efl_ui_pager.c2
-rw-r--r--src/lib/elementary/efl_ui_pager.eo4
-rw-r--r--src/lib/elementary/efl_ui_pan.c4
-rw-r--r--src/lib/elementary/efl_ui_panel.c56
-rw-r--r--src/lib/elementary/efl_ui_panes.c4
-rw-r--r--src/lib/elementary/efl_ui_panes.eo4
-rw-r--r--src/lib/elementary/efl_ui_popup.c8
-rw-r--r--src/lib/elementary/efl_ui_popup.eo1
-rw-r--r--src/lib/elementary/efl_ui_position_manager_data_access_v1.eo1
-rw-r--r--src/lib/elementary/efl_ui_position_manager_entity.eo3
-rw-r--r--src/lib/elementary/efl_ui_position_manager_grid.c71
-rw-r--r--src/lib/elementary/efl_ui_position_manager_list.c57
-rw-r--r--src/lib/elementary/efl_ui_position_manager_list.eo2
-rw-r--r--src/lib/elementary/efl_ui_progressbar.c198
-rw-r--r--src/lib/elementary/efl_ui_progressbar.eo53
-rw-r--r--src/lib/elementary/efl_ui_radio_box.eo2
-rw-r--r--src/lib/elementary/efl_ui_radio_group_impl.c12
-rw-r--r--src/lib/elementary/efl_ui_radio_group_impl.eo1
-rw-r--r--src/lib/elementary/efl_ui_relative_container.eo5
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.c7
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.eo1
-rw-r--r--src/lib/elementary/efl_ui_scroll_util.c14
-rw-r--r--src/lib/elementary/efl_ui_scroller.c18
-rw-r--r--src/lib/elementary/efl_ui_scroller.eo1
-rw-r--r--src/lib/elementary/efl_ui_select_model.c54
-rw-r--r--src/lib/elementary/efl_ui_selection_manager.c6
-rw-r--r--src/lib/elementary/efl_ui_separator.c46
-rw-r--r--src/lib/elementary/efl_ui_separator.eo20
-rw-r--r--src/lib/elementary/efl_ui_single_selectable.eo6
-rw-r--r--src/lib/elementary/efl_ui_spin_button.c9
-rw-r--r--src/lib/elementary/efl_ui_spotlight_container.c10
-rw-r--r--src/lib/elementary/efl_ui_spotlight_container.eo24
-rw-r--r--src/lib/elementary/efl_ui_spotlight_fade_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_stack.c)56
-rw-r--r--src/lib/elementary/efl_ui_spotlight_fade_manager.eo (renamed from src/lib/elementary/efl_ui_spotlight_manager_stack.eo)3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_icon_indicator.c (renamed from src/lib/elementary/efl_ui_spotlight_indicator_icon.c)22
-rw-r--r--src/lib/elementary/efl_ui_spotlight_icon_indicator.eo (renamed from src/lib/elementary/efl_ui_spotlight_indicator_icon.eo)3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_plain_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_plain.c)57
-rw-r--r--src/lib/elementary/efl_ui_spotlight_plain_manager.eo (renamed from src/lib/elementary/efl_ui_spotlight_manager_plain.eo)4
-rw-r--r--src/lib/elementary/efl_ui_spotlight_scroll_manager.c (renamed from src/lib/elementary/efl_ui_spotlight_manager_scroll.c)41
-rw-r--r--src/lib/elementary/efl_ui_spotlight_scroll_manager.eo (renamed from src/lib/elementary/efl_ui_spotlight_manager_scroll.eo)3
-rw-r--r--src/lib/elementary/efl_ui_spotlight_util.c2
-rw-r--r--src/lib/elementary/efl_ui_stack.c2
-rw-r--r--src/lib/elementary/efl_ui_stack.eo3
-rw-r--r--src/lib/elementary/efl_ui_tab_bar.c13
-rw-r--r--src/lib/elementary/efl_ui_tab_bar.eo1
-rw-r--r--src/lib/elementary/efl_ui_tab_bar_private.h1
-rw-r--r--src/lib/elementary/efl_ui_tab_pager.c140
-rw-r--r--src/lib/elementary/efl_ui_tab_pager.eo24
-rw-r--r--src/lib/elementary/efl_ui_tab_pager_private.h1
-rw-r--r--src/lib/elementary/efl_ui_tags.c8
-rw-r--r--src/lib/elementary/efl_ui_text.eo445
-rw-r--r--src/lib/elementary/efl_ui_text_async.eo9
-rw-r--r--src/lib/elementary/efl_ui_text_editable.eo8
-rw-r--r--src/lib/elementary/efl_ui_text_factory_emoticons.c2
-rw-r--r--src/lib/elementary/efl_ui_text_factory_emoticons.eo4
-rw-r--r--src/lib/elementary/efl_ui_text_factory_fallback.c8
-rw-r--r--src/lib/elementary/efl_ui_text_factory_fallback.eo4
-rw-r--r--src/lib/elementary/efl_ui_text_factory_images.c2
-rw-r--r--src/lib/elementary/efl_ui_text_factory_images.eo4
-rw-r--r--src/lib/elementary/efl_ui_text_part.eo8
-rw-r--r--src/lib/elementary/efl_ui_textbox.c (renamed from src/lib/elementary/efl_ui_text.c)2227
-rw-r--r--src/lib/elementary/efl_ui_textbox.eo135
-rw-r--r--src/lib/elementary/efl_ui_textbox_async.eo9
-rw-r--r--src/lib/elementary/efl_ui_textbox_part.eo8
-rw-r--r--src/lib/elementary/efl_ui_timepicker.c62
-rw-r--r--src/lib/elementary/efl_ui_timepicker.eo1
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.c936
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.eo176
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.h (renamed from src/lib/elementary/efl_ui_animation_view.h)2
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_eo.legacy.c200
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_eo.legacy.h (renamed from src/lib/elementary/efl_ui_animation_view_eo.legacy.h)10
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_legacy.h (renamed from src/lib/elementary/efl_ui_animation_view_legacy.h)2
-rw-r--r--src/lib/elementary/efl_ui_vg_animation_private.h43
-rw-r--r--src/lib/elementary/efl_ui_widget.c156
-rw-r--r--src/lib/elementary/efl_ui_widget.eo4
-rw-r--r--src/lib/elementary/efl_ui_widget_common.c13
-rw-r--r--src/lib/elementary/efl_ui_widget_factory.c14
-rw-r--r--src/lib/elementary/efl_ui_widget_scrollable_content.eo2
-rw-r--r--src/lib/elementary/efl_ui_win.c293
-rw-r--r--src/lib/elementary/elc_fileselector.c15
-rw-r--r--src/lib/elementary/elc_fileselector_entry.c14
-rw-r--r--src/lib/elementary/elm_atspi_bridge.c3
-rw-r--r--src/lib/elementary/elm_box.c21
-rw-r--r--src/lib/elementary/elm_calendar.c13
-rw-r--r--src/lib/elementary/elm_code_text.c3
-rw-r--r--src/lib/elementary/elm_code_widget.c18
-rw-r--r--src/lib/elementary/elm_config.c145
-rw-r--r--src/lib/elementary/elm_config.h98
-rw-r--r--src/lib/elementary/elm_dbus_menu.c1
-rw-r--r--src/lib/elementary/elm_deprecated.h19
-rw-r--r--src/lib/elementary/elm_entry.c26
-rw-r--r--src/lib/elementary/elm_focus_legacy.c10
-rw-r--r--src/lib/elementary/elm_gengrid.c28
-rw-r--r--src/lib/elementary/elm_genlist.c40
-rw-r--r--src/lib/elementary/elm_grid.c21
-rw-r--r--src/lib/elementary/elm_index.c12
-rw-r--r--src/lib/elementary/elm_interface_scrollable.c28
-rw-r--r--src/lib/elementary/elm_main.c22
-rw-r--r--src/lib/elementary/elm_need.h15
-rw-r--r--src/lib/elementary/elm_panel.c21
-rw-r--r--src/lib/elementary/elm_photo.c6
-rw-r--r--src/lib/elementary/elm_priv.h14
-rw-r--r--src/lib/elementary/elm_slider.c102
-rw-r--r--src/lib/elementary/elm_slider_eo.legacy.h17
-rw-r--r--src/lib/elementary/elm_table.c21
-rw-r--r--src/lib/elementary/elm_transit.c6
-rw-r--r--src/lib/elementary/elm_widget.h2
-rw-r--r--src/lib/elementary/elm_widget_slider.h1
-rw-r--r--src/lib/elementary/els_box.c2
-rw-r--r--src/lib/elementary/els_cursor.c2
-rw-r--r--src/lib/elementary/meson.build45
-rw-r--r--src/lib/elocation/Elocation.h433
-rw-r--r--src/lib/elocation/elocation.c1414
-rw-r--r--src/lib/elocation/elocation_private.h186
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_client.c448
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_client.h36
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_location.c246
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_location.h22
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_manager.c209
-rw-r--r--src/lib/elocation/gen/eldbus_geo_clue2_manager.h23
-rw-r--r--src/lib/elocation/gen/eldbus_utils.h24
-rw-r--r--src/lib/elocation/gen/meson.build5
-rw-r--r--src/lib/elocation/gen/org.freedesktop.GeoClue2.xml199
-rw-r--r--src/lib/elocation/meson.build28
-rw-r--r--src/lib/elua/meson.build13
-rw-r--r--src/lib/emile/emile_cipher_openssl.c1
-rw-r--r--src/lib/emotion/efl_canvas_video.eo2
-rw-r--r--src/lib/emotion/emotion_smart.c7
-rw-r--r--src/lib/eo/eina_types.eot60
-rw-r--r--src/lib/eo/eo_base_class.c138
-rw-r--r--src/lib/eo/eo_ptr_indirection.x7
-rw-r--r--src/lib/eolian/Eolian.h5
-rw-r--r--src/lib/eolian/database_type_api.c2
-rw-r--r--src/lib/eolian/database_validate.c8
-rw-r--r--src/lib/eolian/eo_parser.c24
-rw-r--r--src/lib/eolian_cxx/grammar/context.hpp25
-rw-r--r--src/lib/eolian_cxx/grammar/eps.hpp8
-rw-r--r--src/lib/eolian_cxx/grammar/klass_def.hpp5
-rw-r--r--src/lib/eolian_cxx/grammar/type_impl.hpp9
-rw-r--r--src/lib/evas/Efl_Canvas.h26
-rw-r--r--src/lib/evas/Evas_Common.h133
-rw-r--r--src/lib/evas/Evas_Eo.h141
-rw-r--r--src/lib/evas/Evas_Internal.h12
-rw-r--r--src/lib/evas/cache/evas_cache.h2
-rw-r--r--src/lib/evas/cache/evas_cache_engine_image.c69
-rw-r--r--src/lib/evas/cache/evas_cache_image.c166
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_alpha.c)22
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_alpha.eo)6
-rw-r--r--src/lib/evas/canvas/efl_canvas_alpha_animation_private.h19
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation.c4
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation.eo8
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_alpha_private.h19
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_group_private.h15
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_rotate_private.h30
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_scale_private.h25
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_translate_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_animation_types.eot4
-rw-r--r--src/lib/evas/canvas/efl_canvas_group.eo4
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group.c)51
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group.eo)8
-rw-r--r--src/lib/evas/canvas/efl_canvas_group_animation_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_image.c21
-rw-r--r--src/lib/evas/canvas/efl_canvas_object.eo6
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_animation.c10
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_animation.eo39
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel.c)10
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel.eo)7
-rw-r--r--src/lib/evas/canvas/efl_canvas_parallel_group_animation_private.h (renamed from src/lib/evas/canvas/efl_canvas_animation_group_parallel_private.h)0
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_rotate.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_rotate.eo)8
-rw-r--r--src/lib/evas/canvas/efl_canvas_rotate_animation_private.h30
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_scale.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_scale.eo)12
-rw-r--r--src/lib/evas/canvas/efl_canvas_scale_animation_private.h25
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential.c)10
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential.eo)6
-rw-r--r--src/lib/evas/canvas/efl_canvas_sequential_group_animation_private.h (renamed from src/lib/evas/canvas/efl_canvas_animation_group_sequential_private.h)0
-rw-r--r--src/lib/evas/canvas/efl_canvas_text.eo565
-rw-r--r--src/lib/evas/canvas/efl_canvas_text_eo.legacy.c72
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock.eo499
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.c72
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_eo.legacy.h (renamed from src/lib/evas/canvas/efl_canvas_text_eo.legacy.h)36
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_factory.eo (renamed from src/lib/evas/canvas/efl_canvas_text_factory.eo)2
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_internal.h (renamed from src/lib/evas/canvas/efl_canvas_text_internal.h)32
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation.c (renamed from src/lib/evas/canvas/efl_canvas_animation_translate.c)30
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation.eo (renamed from src/lib/evas/canvas/efl_canvas_animation_translate.eo)8
-rw-r--r--src/lib/evas/canvas/efl_canvas_translate_animation_private.h16
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container.c6
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_container.eo4
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_image.c1
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_node.c58
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object.c105
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_object_eo.legacy.h2
-rw-r--r--src/lib/evas/canvas/efl_gfx_mapping.c14
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.c8
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.eo2
-rw-r--r--src/lib/evas/canvas/efl_gfx_vg_value_provider.h2
-rw-r--r--src/lib/evas/canvas/efl_input_types.eot17
-rw-r--r--src/lib/evas/canvas/efl_text_cursor.c53
-rw-r--r--src/lib/evas/canvas/efl_text_cursor.eo87
-rw-r--r--src/lib/evas/canvas/efl_text_formatter.c (renamed from src/lib/evas/canvas/efl_text_attribute_factory.c)33
-rw-r--r--src/lib/evas/canvas/efl_text_formatter.eo (renamed from src/lib/evas/canvas/efl_text_attribute_factory.eo)18
-rw-r--r--src/lib/evas/canvas/evas_callbacks.c7
-rw-r--r--src/lib/evas/canvas/evas_clip.c4
-rw-r--r--src/lib/evas/canvas/evas_device.c6
-rw-r--r--src/lib/evas/canvas/evas_events.c42
-rw-r--r--src/lib/evas/canvas/evas_focus.c2
-rw-r--r--src/lib/evas/canvas/evas_image_legacy.c8
-rw-r--r--src/lib/evas/canvas/evas_image_private.h2
-rw-r--r--src/lib/evas/canvas/evas_main.c8
-rw-r--r--src/lib/evas/canvas/evas_object_box.c10
-rw-r--r--src/lib/evas/canvas/evas_object_grid.c20
-rw-r--r--src/lib/evas/canvas/evas_object_image.c40
-rw-r--r--src/lib/evas/canvas/evas_object_main.c17
-rw-r--r--src/lib/evas/canvas/evas_object_smart.c53
-rw-r--r--src/lib/evas/canvas/evas_object_text.c6
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c2604
-rw-r--r--src/lib/evas/canvas/evas_render.c32
-rw-r--r--src/lib/evas/canvas/evas_text_eo.c2
-rw-r--r--src/lib/evas/canvas/evas_text_eo.hh4
-rw-r--r--src/lib/evas/canvas/evas_textblock_hyphenation.x4
-rw-r--r--src/lib/evas/canvas/evas_textblock_legacy.h112
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.c2
-rw-r--r--src/lib/evas/canvas/evas_textgrid_eo.hh4
-rw-r--r--src/lib/evas/canvas/evas_vg_private.h2
-rw-r--r--src/lib/evas/canvas/meson.build38
-rw-r--r--src/lib/evas/common/evas_font.h53
-rw-r--r--src/lib/evas/common/evas_font_draw.c2
-rw-r--r--src/lib/evas/common/evas_font_load.c6
-rw-r--r--src/lib/evas/common/evas_font_main.c296
-rw-r--r--src/lib/evas/common/evas_font_query.c66
-rw-r--r--src/lib/evas/common/evas_image.h1
-rw-r--r--src/lib/evas/common/evas_image_main.c12
-rw-r--r--src/lib/evas/common/evas_map_image.c8
-rw-r--r--src/lib/evas/common/evas_map_image_internal_high.c2
-rw-r--r--src/lib/evas/common/evas_text_utils.c6
-rw-r--r--src/lib/evas/filters/evas_filter.c2
-rw-r--r--src/lib/evas/filters/meson.build30
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture.c17
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture.eo19
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_custom.c38
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_custom.eo33
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_double_tap.eo4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_events.eo (renamed from src/lib/evas/gesture/efl_gesture_events.eo)22
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_flick.c4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_flick.eo24
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_long_tap.eo4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_manager.c566
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_manager.eo25
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_momentum.c2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_momentum.eo14
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_private.h78
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer.c40
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer.eo37
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.c37
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_custom.eo28
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.c185
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_double_tap.eo14
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.c274
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_flick.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.c183
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_long_tap.eo15
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.c277
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_momentum.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.c112
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_tap.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.c184
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_triple_tap.eo14
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.c228
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_recognizer_zoom.eo2
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_tap.eo4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_touch.c116
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_touch.eo35
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_triple_tap.eo4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_types.eot57
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_zoom.c4
-rw-r--r--src/lib/evas/gesture/efl_canvas_gesture_zoom.eo24
-rw-r--r--src/lib/evas/gesture/meson.build6
-rw-r--r--src/lib/evas/include/evas_private.h7
-rw-r--r--src/lib/evas/meson.build2
-rw-r--r--src/lib/evas/vg/evas_vg_cache.c51
-rw-r--r--src/lib/exactness/Exactness.h268
-rw-r--r--src/lib/exactness/exactness_private.h10
-rw-r--r--src/lib/exactness/legacy_file.c875
-rw-r--r--src/lib/exactness/meson.build31
-rw-r--r--src/lib/exactness/unit.c409
447 files changed, 16589 insertions, 13514 deletions
diff --git a/src/lib/ecore/Ecore_Common.h b/src/lib/ecore/Ecore_Common.h
index 443a058..1455644 100644
--- a/src/lib/ecore/Ecore_Common.h
+++ b/src/lib/ecore/Ecore_Common.h
@@ -2798,7 +2798,7 @@ typedef enum
2798 * @warning Too small a value may cause performance issues and too high a 2798 * @warning Too small a value may cause performance issues and too high a
2799 * value may cause your animation to seem "jerky". 2799 * value may cause your animation to seem "jerky".
2800 * 2800 *
2801 * @note The default @p frametime value is 1/30th of a second. 2801 * @note The default @p frametime value is 1/60th of a second.
2802 */ 2802 */
2803EAPI void ecore_animator_frametime_set(double frametime); 2803EAPI void ecore_animator_frametime_set(double frametime);
2804 2804
@@ -2950,7 +2950,7 @@ EAPI double ecore_animator_pos_map_n(double pos, Ecore_Pos_Map map, int v_size,
2950 * on the animator source. The default source is the system clock timer 2950 * on the animator source. The default source is the system clock timer
2951 * source - ECORE_ANIMATOR_SOURCE_TIMER. This source uses the system clock 2951 * source - ECORE_ANIMATOR_SOURCE_TIMER. This source uses the system clock
2952 * to tick over every N seconds (specified by ecore_animator_frametime_set(), 2952 * to tick over every N seconds (specified by ecore_animator_frametime_set(),
2953 * with the default being 1/30th of a second unless set otherwise). You can 2953 * with the default being 1/60th of a second unless set otherwise). You can
2954 * set a custom tick source by setting the source to 2954 * set a custom tick source by setting the source to
2955 * ECORE_ANIMATOR_SOURCE_CUSTOM and then drive it yourself based on some input 2955 * ECORE_ANIMATOR_SOURCE_CUSTOM and then drive it yourself based on some input
2956 * tick source (like another application via ipc, some vertical blanking 2956 * tick source (like another application via ipc, some vertical blanking
diff --git a/src/lib/ecore/ecore_exe_posix.c b/src/lib/ecore/ecore_exe_posix.c
index 4a9b7a3..07f1058 100644
--- a/src/lib/ecore/ecore_exe_posix.c
+++ b/src/lib/ecore/ecore_exe_posix.c
@@ -16,6 +16,8 @@
16 16
17#ifdef HAVE_PRCTL 17#ifdef HAVE_PRCTL
18# include <sys/prctl.h> 18# include <sys/prctl.h>
19#elif defined(HAVE_PROCCTL)
20# include <sys/procctl.h>
19#endif 21#endif
20 22
21#ifdef HAVE_SYS_WAIT_H 23#ifdef HAVE_SYS_WAIT_H
@@ -372,19 +374,6 @@ _impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
372 _ecore_exe_exec_it(exe_cmd, flags); /* no return */ 374 _ecore_exe_exec_it(exe_cmd, flags); /* no return */
373 } 375 }
374 } 376 }
375
376 /* Something went 'orribly wrong. */
377 vfork_exec_errno = errno;
378
379 /* Close the pipes. */
380 if (flags & ECORE_EXE_PIPE_ERROR)
381 E_NO_ERRNO(result, close(errorPipe[1]), ok);
382 if (flags & ECORE_EXE_PIPE_READ)
383 E_NO_ERRNO(result, close(readPipe[1]), ok);
384 if (flags & ECORE_EXE_PIPE_WRITE)
385 E_NO_ERRNO(result, close(writePipe[0]), ok);
386 E_NO_ERRNO(result, close(statusPipe[1]), ok);
387
388 _exit(-1); 377 _exit(-1);
389 } 378 }
390 else /* parent */ 379 else /* parent */
@@ -1013,6 +1002,12 @@ _ecore_exe_exec_it(const char *exe_cmd,
1013 { 1002 {
1014 prctl(PR_SET_PDEATHSIG, SIGTERM); 1003 prctl(PR_SET_PDEATHSIG, SIGTERM);
1015 } 1004 }
1005#elif defined(HAVE_PROCCTL)
1006 if ((flags & ECORE_EXE_TERM_WITH_PARENT))
1007 {
1008 int sig = SIGTERM;
1009 procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
1010 }
1016#endif 1011#endif
1017 1012
1018 if (!(flags & ECORE_EXE_NOT_LEADER)) setsid(); 1013 if (!(flags & ECORE_EXE_NOT_LEADER)) setsid();
diff --git a/src/lib/ecore/ecore_internal.h b/src/lib/ecore/ecore_internal.h
index 32a9472..9f6e55e 100644
--- a/src/lib/ecore/ecore_internal.h
+++ b/src/lib/ecore/ecore_internal.h
@@ -129,6 +129,39 @@ _efl_composite_lookup(const Efl_Class *self, Eo *parent, Efl_Model *view, unsign
129 EFL_COMPOSITE_REMEMBER_RETURN(remember, view); 129 EFL_COMPOSITE_REMEMBER_RETURN(remember, view);
130} 130}
131 131
132/* Result from eina_future_all_* is an EINA_VALUE_TYPE_ARRAY that contain Eina_Value of
133 Eo Model. It is expected that children slice get return an EINA_VALUE_TYPE_ARRAY that
134 contain Eo Model directly.
135*/
136static inline Eina_Value
137_efl_future_all_repack(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
138{
139 unsigned int i, len;
140 Eina_Value created = EINA_VALUE_EMPTY;
141 Eina_Value r = EINA_VALUE_EMPTY;
142
143 eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4);
144
145 EINA_VALUE_ARRAY_FOREACH(&v, len, i, created)
146 {
147 Eo *target = NULL;
148
149 if (eina_value_type_get(&created) != EINA_VALUE_TYPE_OBJECT)
150 goto on_error;
151
152 target = eina_value_object_get(&created);
153 if (!target) goto on_error;
154
155 eina_value_array_append(&r, target);
156 }
157
158 return r;
159
160 on_error:
161 eina_value_flush(&r);
162 return eina_value_error_init(EFL_MODEL_ERROR_UNKNOWN);
163}
164
132#undef EAPI 165#undef EAPI
133#define EAPI 166#define EAPI
134 167
diff --git a/src/lib/ecore/efl_accelerate_interpolator.eo b/src/lib/ecore/efl_accelerate_interpolator.eo
index 648dc1b..6245581 100644
--- a/src/lib/ecore/efl_accelerate_interpolator.eo
+++ b/src/lib/ecore/efl_accelerate_interpolator.eo
@@ -1,10 +1,12 @@
1class @beta Efl.Accelerate_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Accelerate_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Accelerated interpolator. It starts slow and accelerates, stopping abruptly when 3 [[Accelerated interpolator. It starts slow and accelerates, stopping abruptly when
4 it reaches $[1.0]. 4 it reaches $[1.0].
5 5
6 Internally it uses the first half of a sinus rise (from 0 to 0.5) and the steepness 6 Internally it uses the first half of a sinus rise (from 0 to 0.5) and the steepness
7 can be customized. 7 can be customized.
8
9 @since 1.24
8 ]] 10 ]]
9 data: Efl_Accelerate_Interpolator_Data; 11 data: Efl_Accelerate_Interpolator_Data;
10 methods { 12 methods {
diff --git a/src/lib/ecore/efl_boolean_model.c b/src/lib/ecore/efl_boolean_model.c
index 552baf1..9e61ce3 100644
--- a/src/lib/ecore/efl_boolean_model.c
+++ b/src/lib/ecore/efl_boolean_model.c
@@ -406,8 +406,8 @@ struct _Eina_Iterator_Boolean
406 Efl_Boolean_Model_Storage_Range *sr; 406 Efl_Boolean_Model_Storage_Range *sr;
407 Eina_Iterator *infix; 407 Eina_Iterator *infix;
408 408
409 uint64_t index; 409 unsigned int index;
410 uint64_t total; 410 unsigned int total;
411 411
412 Eina_Bool request; 412 Eina_Bool request;
413}; 413};
@@ -423,7 +423,7 @@ _efl_boolean_model_iterator_storage_index_find(Eina_Iterator_Boolean *it)
423 423
424 while (offset < it->sr->length) 424 while (offset < it->sr->length)
425 { 425 {
426 uint64_t upidx; 426 unsigned int upidx;
427 427
428 upidx = offset >> 3; 428 upidx = offset >> 3;
429 429
diff --git a/src/lib/ecore/efl_bounce_interpolator.eo b/src/lib/ecore/efl_bounce_interpolator.eo
index 54998d6..e35b60c 100644
--- a/src/lib/ecore/efl_bounce_interpolator.eo
+++ b/src/lib/ecore/efl_bounce_interpolator.eo
@@ -1,9 +1,11 @@
1class @beta Efl.Bounce_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Bounce_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Bouncing interpolator. The value quickly reaches $[1.0] and then bounces back 3 [[Bouncing interpolator. The value quickly reaches $[1.0] and then bounces back
4 a number of times before stopping at $[1.0]. 4 a number of times before stopping at $[1.0].
5 5
6 The number of bounces and how far it goes back on every bounce can be customized. 6 The number of bounces and how far it goes back on every bounce can be customized.
7
8 @since 1.24
7 ]] 9 ]]
8 data: Efl_Bounce_Interpolator_Data; 10 data: Efl_Bounce_Interpolator_Data;
9 methods { 11 methods {
diff --git a/src/lib/ecore/efl_core_proc_env.c b/src/lib/ecore/efl_core_proc_env.c
index a4ee9d7..3b21015 100644
--- a/src/lib/ecore/efl_core_proc_env.c
+++ b/src/lib/ecore/efl_core_proc_env.c
@@ -68,6 +68,12 @@ _sync(Efl_Core_Env *obj, Efl_Core_Proc_Env_Data *pd)
68 break; 68 break;
69 } 69 }
70 } 70 }
71
72 if (values)
73 {
74 free(values[0]);
75 free(values);
76 }
71 } 77 }
72 } 78 }
73 EINA_LIST_FOREACH(existing_keys, n, key) 79 EINA_LIST_FOREACH(existing_keys, n, key)
diff --git a/src/lib/ecore/efl_cubic_bezier_interpolator.eo b/src/lib/ecore/efl_cubic_bezier_interpolator.eo
index 30614b9..4c67204 100644
--- a/src/lib/ecore/efl_cubic_bezier_interpolator.eo
+++ b/src/lib/ecore/efl_cubic_bezier_interpolator.eo
@@ -1,10 +1,12 @@
1class @beta Efl.Cubic_Bezier_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Cubic_Bezier_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Cubic Bezier interpolator. It starts slow, then moves quickly and then slows down 3 [[Cubic Bezier interpolator. It starts slow, then moves quickly and then slows down
4 again before stopping. 4 again before stopping.
5 5
6 The exact shape of the mapping curve can be modified through the @.control_points 6 The exact shape of the mapping curve can be modified through the @.control_points
7 property. 7 property.
8
9 @since 1.24
8 ]] 10 ]]
9 data: Efl_Cubic_Bezier_Interpolator_Data; 11 data: Efl_Cubic_Bezier_Interpolator_Data;
10 methods { 12 methods {
diff --git a/src/lib/ecore/efl_decelerate_interpolator.eo b/src/lib/ecore/efl_decelerate_interpolator.eo
index eef3b3a..bbda6cf 100644
--- a/src/lib/ecore/efl_decelerate_interpolator.eo
+++ b/src/lib/ecore/efl_decelerate_interpolator.eo
@@ -1,10 +1,12 @@
1class @beta Efl.Decelerate_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Decelerate_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Decelerated interpolator. It starts fast and decelerates, stopping smoothly when 3 [[Decelerated interpolator. It starts fast and decelerates, stopping smoothly when
4 it reaches $[1.0]. 4 it reaches $[1.0].
5 5
6 Internally it uses the second half of a sinus rise (from 0.5 to 1.0) and the steepness 6 Internally it uses the second half of a sinus rise (from 0.5 to 1.0) and the steepness
7 can be customized through the @.slope property. 7 can be customized through the @.slope property.
8
9 @since 1.24
8 ]] 10 ]]
9 data: Efl_Decelerate_Interpolator_Data; 11 data: Efl_Decelerate_Interpolator_Data;
10 methods { 12 methods {
diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c
index 8609dbf..b2c6341 100644
--- a/src/lib/ecore/efl_exe.c
+++ b/src/lib/ecore/efl_exe.c
@@ -25,8 +25,10 @@
25# include <sys/socket.h> 25# include <sys/socket.h>
26# ifdef HAVE_PRCTL 26# ifdef HAVE_PRCTL
27# include <sys/prctl.h> 27# include <sys/prctl.h>
28# elif defined(HAVE_PROCCTL)
29# include <sys/procctl.h>
28# endif 30# endif
29# ifdef HAVE_SYS_WAIT_H 31#ifdef HAVE_SYS_WAIT_H
30# include <sys/wait.h> 32# include <sys/wait.h>
31# endif 33# endif
32# ifndef HAVE_CLEARENV 34# ifndef HAVE_CLEARENV
@@ -150,7 +152,13 @@ _exec(const char *cmd, Efl_Exe_Flags flags, Efl_Task_Flags task_flags)
150# ifdef HAVE_PRCTL 152# ifdef HAVE_PRCTL
151 if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT) 153 if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
152 prctl(PR_SET_PDEATHSIG, SIGTERM); 154 prctl(PR_SET_PDEATHSIG, SIGTERM);
153# endif 155#elif defined(HAVE_PROCCTL)
156 if (task_flags & EFL_TASK_FLAGS_EXIT_WITH_PARENT)
157 {
158 int sig = SIGTERM;
159 procctl(P_PID, 0, PROC_PDEATHSIG_CTL, &sig);
160 }
161#endif
154 162
155 if (flags & EFL_EXE_FLAGS_GROUP_LEADER) setsid(); 163 if (flags & EFL_EXE_FLAGS_GROUP_LEADER) setsid();
156 if (use_sh) // We have to use a shell to run this. 164 if (use_sh) // We have to use a shell to run this.
diff --git a/src/lib/ecore/efl_filter_model.c b/src/lib/ecore/efl_filter_model.c
index a382b7b..4ef3316 100644
--- a/src/lib/ecore/efl_filter_model.c
+++ b/src/lib/ecore/efl_filter_model.c
@@ -11,8 +11,8 @@ struct _Efl_Filter_Model_Mapping
11{ 11{
12 EINA_RBTREE; 12 EINA_RBTREE;
13 13
14 uint64_t original; 14 unsigned int original;
15 uint64_t mapped; 15 unsigned int mapped;
16 16
17 EINA_REFCOUNT; 17 EINA_REFCOUNT;
18}; 18};
@@ -28,10 +28,10 @@ struct _Efl_Filter_Model_Data
28 void *data; 28 void *data;
29 EflFilterModel cb; 29 EflFilterModel cb;
30 Eina_Free_Cb free_cb; 30 Eina_Free_Cb free_cb;
31 uint64_t count; 31 unsigned int count;
32 } filter; 32 } filter;
33 33
34 uint64_t counted; 34 unsigned int counted;
35 Eina_Bool counting_started : 1; 35 Eina_Bool counting_started : 1;
36 Eina_Bool processed : 1; 36 Eina_Bool processed : 1;
37}; 37};
@@ -54,7 +54,7 @@ _filter_mapping_looking_cb(const Eina_Rbtree *node, const void *key,
54 int length EINA_UNUSED, void *data EINA_UNUSED) 54 int length EINA_UNUSED, void *data EINA_UNUSED)
55{ 55{
56 const Efl_Filter_Model_Mapping *n = (const Efl_Filter_Model_Mapping *) node; 56 const Efl_Filter_Model_Mapping *n = (const Efl_Filter_Model_Mapping *) node;
57 const uint64_t *k = key; 57 const unsigned int *k = key;
58 58
59 return n->mapped - *k; 59 return n->mapped - *k;
60} 60}
@@ -85,7 +85,7 @@ struct _Efl_Filter_Request
85 Efl_Filter_Model_Data *pd; 85 Efl_Filter_Model_Data *pd;
86 Efl_Model *parent; 86 Efl_Model *parent;
87 Efl_Model *child; 87 Efl_Model *child;
88 uint64_t index; 88 unsigned int index;
89}; 89};
90 90
91static Efl_Filter_Model * 91static Efl_Filter_Model *
@@ -243,7 +243,7 @@ _efl_filter_model_child_removed(void *data, const Efl_Event *event)
243 Efl_Filter_Model_Mapping *mapping; 243 Efl_Filter_Model_Mapping *mapping;
244 Efl_Filter_Model_Data *pd = data; 244 Efl_Filter_Model_Data *pd = data;
245 Efl_Model_Children_Event *ev = event->info; 245 Efl_Model_Children_Event *ev = event->info;
246 uint64_t removed = ev->index; 246 unsigned int removed = ev->index;
247 247
248 mapping = (void *)eina_rbtree_inline_lookup(pd->mapping, 248 mapping = (void *)eina_rbtree_inline_lookup(pd->mapping,
249 &removed, sizeof (uint64_t), 249 &removed, sizeof (uint64_t),
@@ -314,39 +314,6 @@ _filter_remove_array(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
314 return eina_value_object_init(target); 314 return eina_value_object_init(target);
315} 315}
316 316
317/* Result from eina_future_all_array is an EINA_VALUE_TYPE_ARRAY that contain Eina_Value of
318 Eo Model. It is expected that children slice get return an EINA_VALUE_TYPE_ARRAY that
319 contain Eo Model directly.
320*/
321static Eina_Value
322_filter_cleanup_array(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
323{
324 unsigned int i, len;
325 Eina_Value created = EINA_VALUE_EMPTY;
326 Eina_Value r = EINA_VALUE_EMPTY;
327
328 eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4);
329
330 EINA_VALUE_ARRAY_FOREACH(&v, len, i, created)
331 {
332 Eo *target = NULL;
333
334 if (eina_value_type_get(&created) != EINA_VALUE_TYPE_OBJECT)
335 goto on_error;
336
337 target = eina_value_object_get(&created);
338 if (!target) goto on_error;
339
340 eina_value_array_append(&r, target);
341 }
342
343 return r;
344
345 on_error:
346 eina_value_flush(&r);
347 return eina_value_error_init(EFL_MODEL_ERROR_UNKNOWN);
348}
349
350static Eina_Future * 317static Eina_Future *
351_efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *pd, 318_efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *pd,
352 unsigned int start, unsigned int count) 319 unsigned int start, unsigned int count)
@@ -370,10 +337,10 @@ _efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *p
370 337
371 for (i = 0; i < count; i++) 338 for (i = 0; i < count; i++)
372 { 339 {
373 uint64_t lookup = start + i; 340 unsigned int lookup = start + i;
374 341
375 mapping[i] = (void *)eina_rbtree_inline_lookup(pd->mapping, 342 mapping[i] = (void *)eina_rbtree_inline_lookup(pd->mapping,
376 &lookup, sizeof (uint64_t), 343 &lookup, sizeof (unsigned int),
377 _filter_mapping_looking_cb, NULL); 344 _filter_mapping_looking_cb, NULL);
378 if (!mapping[i]) goto on_error; 345 if (!mapping[i]) goto on_error;
379 } 346 }
@@ -389,7 +356,7 @@ _efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *p
389 } 356 }
390 r[i] = EINA_FUTURE_SENTINEL; 357 r[i] = EINA_FUTURE_SENTINEL;
391 358
392 f = efl_future_then(obj, eina_future_all_array(r), .success = _filter_cleanup_array); 359 f = efl_future_then(obj, eina_future_all_array(r), .success = _efl_future_all_repack);
393 free(r); 360 free(r);
394 free(mapping); 361 free(mapping);
395 362
@@ -410,7 +377,7 @@ typedef struct _Efl_Filter_Model_Result Efl_Filter_Model_Result;
410struct _Efl_Filter_Model_Result 377struct _Efl_Filter_Model_Result
411{ 378{
412 Efl_Filter_Model_Data *pd; 379 Efl_Filter_Model_Data *pd;
413 uint64_t count; 380 unsigned int count;
414 Efl_Model *targets[1]; 381 Efl_Model *targets[1];
415}; 382};
416 383
@@ -422,7 +389,7 @@ _efl_filter_model_array_result_request(Eo *o EINA_UNUSED, void *data, const Eina
422 Efl_Filter_Model_Data *pd = req->pd; 389 Efl_Filter_Model_Data *pd = req->pd;
423 unsigned int i, len; 390 unsigned int i, len;
424 Eina_Value request = EINA_VALUE_EMPTY; 391 Eina_Value request = EINA_VALUE_EMPTY;
425 uint64_t pcount = pd->filter.count; 392 unsigned int pcount = pd->filter.count;
426 393
427 EINA_VALUE_ARRAY_FOREACH(&v, len, i, request) 394 EINA_VALUE_ARRAY_FOREACH(&v, len, i, request)
428 { 395 {
@@ -465,7 +432,7 @@ static void
465_efl_filter_model_array_result_free(Eo *o EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED) 432_efl_filter_model_array_result_free(Eo *o EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
466{ 433{
467 Efl_Filter_Model_Result *req = data; 434 Efl_Filter_Model_Result *req = data;
468 uint64_t i; 435 unsigned int i;
469 436
470 for (i = 0; i < req->count; i++) 437 for (i = 0; i < req->count; i++)
471 efl_unref(req->targets[i]); 438 efl_unref(req->targets[i]);
diff --git a/src/lib/ecore/efl_linear_interpolator.eo b/src/lib/ecore/efl_linear_interpolator.eo
index 866247d..27f43a9 100644
--- a/src/lib/ecore/efl_linear_interpolator.eo
+++ b/src/lib/ecore/efl_linear_interpolator.eo
@@ -1,6 +1,8 @@
1class @beta Efl.Linear_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Linear_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Linear interpolation (pass-through). Input values are used unmodified as output. 3 [[Linear interpolation (pass-through). Input values are used unmodified as output.
4
5 @since 1.24
4 ]] 6 ]]
5 data: Efl_Linear_Interpolator_Data; 7 data: Efl_Linear_Interpolator_Data;
6 implements { 8 implements {
diff --git a/src/lib/ecore/efl_loop_model.c b/src/lib/ecore/efl_loop_model.c
index d3e52a6..88d8574 100644
--- a/src/lib/ecore/efl_loop_model.c
+++ b/src/lib/ecore/efl_loop_model.c
@@ -108,6 +108,42 @@ _efl_loop_model_efl_model_property_ready_get(Eo *obj, void *pd EINA_UNUSED, cons
108 return efl_future_then(obj, f); 108 return efl_future_then(obj, f);
109} 109}
110 110
111static Eina_Value
112_unpack_from_array(void *data EINA_UNUSED, Eina_Value v, const Eina_Future *f EINA_UNUSED)
113{
114 Eo *object = NULL;
115
116 if (eina_value_type_get(&v) == EINA_VALUE_TYPE_ERROR) return v;
117 if (eina_value_type_get(&v) != EINA_VALUE_TYPE_ARRAY) return eina_value_error_init(EINVAL);
118 if (eina_value_array_count(&v) != 1) return eina_value_error_init(EINVAL);
119
120 eina_value_array_get(&v, 0, &object);
121
122 return eina_value_object_init(object);
123}
124
125static Eina_Future *
126_efl_loop_model_efl_model_children_index_get(Eo *obj, void *pd EINA_UNUSED, Eina_Iterator *indexes)
127{
128 Eina_Future *r;
129 Eina_Array futures;
130 unsigned int idx;
131
132 eina_array_step_set(&futures, sizeof (Eina_Array), 8);
133
134 EINA_ITERATOR_FOREACH(indexes, idx)
135 eina_array_push(&futures, eina_future_then(efl_model_children_slice_get(obj, idx, 1), _unpack_from_array, NULL));
136 eina_iterator_free(indexes);
137
138 r = efl_future_then(obj, eina_future_all_iterator(eina_array_iterator_new(&futures)),
139 .success = _efl_future_all_repack,
140 .success_type = EINA_VALUE_TYPE_ARRAY);
141
142 eina_array_flush(&futures);
143
144 return r;
145}
146
111static void 147static void
112_noref_death(void *data EINA_UNUSED, const Efl_Event *event) 148_noref_death(void *data EINA_UNUSED, const Efl_Event *event)
113{ 149{
diff --git a/src/lib/ecore/efl_loop_model.eo b/src/lib/ecore/efl_loop_model.eo
index 2285b56..06af337 100644
--- a/src/lib/ecore/efl_loop_model.eo
+++ b/src/lib/ecore/efl_loop_model.eo
@@ -20,5 +20,6 @@ abstract Efl.Loop_Model extends Efl.Loop_Consumer implements Efl.Model
20 Efl.Object.invalidate; 20 Efl.Object.invalidate;
21 Efl.Model.property_ready_get; 21 Efl.Model.property_ready_get;
22 Efl.Model.property { get; set; } 22 Efl.Model.property { get; set; }
23 Efl.Model.children_index_get;
23 } 24 }
24} 25}
diff --git a/src/lib/ecore/efl_sinusoidal_interpolator.eo b/src/lib/ecore/efl_sinusoidal_interpolator.eo
index ad48232..c78f39e 100644
--- a/src/lib/ecore/efl_sinusoidal_interpolator.eo
+++ b/src/lib/ecore/efl_sinusoidal_interpolator.eo
@@ -1,9 +1,11 @@
1class @beta Efl.Sinusoidal_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Sinusoidal_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Sinusoidal interpolator. It starts slow, then moves quickly and then slows down 3 [[Sinusoidal interpolator. It starts slow, then moves quickly and then slows down
4 again before stopping. 4 again before stopping.
5 5
6 How long it stays in the quick zone (the slope of the curve) can be customized. 6 How long it stays in the quick zone (the slope of the curve) can be customized.
7
8 @since 1.24
7 ]] 9 ]]
8 data: Efl_Sinusoidal_Interpolator_Data; 10 data: Efl_Sinusoidal_Interpolator_Data;
9 methods { 11 methods {
diff --git a/src/lib/ecore/efl_spring_interpolator.eo b/src/lib/ecore/efl_spring_interpolator.eo
index 9890666..dd9e196 100644
--- a/src/lib/ecore/efl_spring_interpolator.eo
+++ b/src/lib/ecore/efl_spring_interpolator.eo
@@ -1,9 +1,11 @@
1class @beta Efl.Spring_Interpolator extends Efl.Object implements Efl.Interpolator 1class Efl.Spring_Interpolator extends Efl.Object implements Efl.Interpolator
2{ 2{
3 [[Spring interpolator. The value quickly reaches $[1.0] and then oscillates 3 [[Spring interpolator. The value quickly reaches $[1.0] and then oscillates
4 around it a number of times before stopping (as if linked with a spring). 4 around it a number of times before stopping (as if linked with a spring).
5 5
6 The number of oscillations and how quickly it stops can be customized. 6 The number of oscillations and how quickly it stops can be customized.
7
8 @since 1.24
7 ]] 9 ]]
8 data: Efl_Spring_Interpolator_Data; 10 data: Efl_Spring_Interpolator_Data;
9 methods { 11 methods {
diff --git a/src/lib/ecore_con/Ecore_Con.h b/src/lib/ecore_con/Ecore_Con.h
index f919158..d8b9583 100644
--- a/src/lib/ecore_con/Ecore_Con.h
+++ b/src/lib/ecore_con/Ecore_Con.h
@@ -1126,12 +1126,8 @@ EAPI void ecore_con_socks_apply_always(Ecore_Con_Socks *ecs);
1126 * server to client and client to server, can be represented in the following 1126 * server to client and client to server, can be represented in the following
1127 * sequence diagram: 1127 * sequence diagram:
1128 * 1128 *
1129 * @htmlonly
1130 * <img src="ecore_con-client-server.png" style="max-width: 400px"/>
1131 * <a href="ecore_con-client-server.png">Full size</a>
1132 * @endhtmlonly
1133 *
1134 * @image rtf ecore_con-client-server.png 1129 * @image rtf ecore_con-client-server.png
1130 * @image html ecore_con-client-server.png
1135 * @image latex ecore_con-client-server.eps width=\\textwidth 1131 * @image latex ecore_con-client-server.eps width=\\textwidth
1136 * 1132 *
1137 * Please notice the important difference between these two codes: the first is 1133 * Please notice the important difference between these two codes: the first is
diff --git a/src/lib/ecore_con/efl_net_control-connman.c b/src/lib/ecore_con/efl_net_control-connman.c
index 8334d4d..ceb3541 100644
--- a/src/lib/ecore_con/efl_net_control-connman.c
+++ b/src/lib/ecore_con/efl_net_control-connman.c
@@ -212,6 +212,7 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
212 Efl_Net_Control_Agent_Request_Input event = { }; 212 Efl_Net_Control_Agent_Request_Input event = { };
213 Efl_Net_Control_Agent_Request_Input_Information *info; 213 Efl_Net_Control_Agent_Request_Input_Information *info;
214 Eldbus_Message_Iter *array, *entry; 214 Eldbus_Message_Iter *array, *entry;
215 Eina_Array infos;
215 const char *path; 216 const char *path;
216 217
217 DBG("Agent %p requested input %s", o, eldbus_message_path_get(msg)); 218 DBG("Agent %p requested input %s", o, eldbus_message_path_get(msg));
@@ -231,6 +232,8 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
231 if (!eldbus_message_arguments_get(msg, "oa{sv}", &path, &array)) 232 if (!eldbus_message_arguments_get(msg, "oa{sv}", &path, &array))
232 goto err; 233 goto err;
233 234
235 eina_array_step_set(&infos, sizeof (Eina_Array), 4);
236 event.informational = eina_array_accessor_new(&infos);
234 event.access_point = _efl_net_control_access_point_find(pd, path); 237 event.access_point = _efl_net_control_access_point_find(pd, path);
235 238
236 while (eldbus_message_iter_get_and_next(array, 'e', &entry)) 239 while (eldbus_message_iter_get_and_next(array, 'e', &entry))
@@ -261,7 +264,7 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
261 { 264 {
262 info = _efl_net_control_agent_informational_get(name, var); 265 info = _efl_net_control_agent_informational_get(name, var);
263 if (info) 266 if (info)
264 event.informational = eina_list_append(event.informational, info); 267 eina_array_push(&infos, info);
265 else 268 else
266 WRN("Unknown field name '%s'", name); 269 WRN("Unknown field name '%s'", name);
267 } 270 }
@@ -270,7 +273,9 @@ _efl_net_control_agent_request_input(const Eldbus_Service_Interface *service, co
270 pd->agent_request_input.msg = eldbus_message_ref((Eldbus_Message *)msg); 273 pd->agent_request_input.msg = eldbus_message_ref((Eldbus_Message *)msg);
271 efl_event_callback_call(o, EFL_NET_CONTROL_MANAGER_EVENT_AGENT_REQUEST_INPUT, &event); 274 efl_event_callback_call(o, EFL_NET_CONTROL_MANAGER_EVENT_AGENT_REQUEST_INPUT, &event);
272 275
273 EINA_LIST_FREE(event.informational, info) free(info); 276 eina_accessor_free(event.informational);
277 while ((info = eina_array_pop(&infos))) free(info);
278 eina_array_flush(&infos);
274 279
275 return NULL; /* reply later */ 280 return NULL; /* reply later */
276 281
diff --git a/src/lib/ecore_con/efl_net_control_manager.eo b/src/lib/ecore_con/efl_net_control_manager.eo
index 3c84235..eb0a614 100644
--- a/src/lib/ecore_con/efl_net_control_manager.eo
+++ b/src/lib/ecore_con/efl_net_control_manager.eo
@@ -36,7 +36,7 @@ struct @beta Efl.Net.Control.Agent_Request_Input {
36 access_point: Efl.Net.Control.Access_Point; [[The access point which triggered this request.]] 36 access_point: Efl.Net.Control.Access_Point; [[The access point which triggered this request.]]
37 fields: Efl.Net.Control.Agent_Request_Input_Field; [[Bitwise OR of fields present in this request.]] 37 fields: Efl.Net.Control.Agent_Request_Input_Field; [[Bitwise OR of fields present in this request.]]
38 passphrase_type: string; [[Extra detail for the passphrase field, such as wep, psk, response (IEEE802.X GTC/OTP), string...]] 38 passphrase_type: string; [[Extra detail for the passphrase field, such as wep, psk, response (IEEE802.X GTC/OTP), string...]]
39 informational: list<Efl.Net.Control.Agent_Request_Input_Information>; [[Such as the previous passphrase, VPN host]] 39 informational: accessor<Efl.Net.Control.Agent_Request_Input_Information>; [[Such as the previous passphrase, VPN host]]
40} 40}
41 41
42struct @beta Efl.Net.Control.Agent_Error { 42struct @beta Efl.Net.Control.Agent_Error {
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.c b/src/lib/ecore_con/efl_net_dialer_websocket.c
index e6672e6..a16579c 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.c
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.c
@@ -86,14 +86,12 @@ _efl_net_dialer_websocket_close_reason_check(Efl_Net_Dialer_Websocket_Close_Reas
86 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_TOO_BIG: 86 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_TOO_BIG:
87 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_MISSING_EXTENSION: 87 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_MISSING_EXTENSION:
88 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_SERVER_ERROR: 88 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_SERVER_ERROR:
89 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_START:
90 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_END:
91 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_PRIVATE_START:
92 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_PRIVATE_END:
93 return EINA_TRUE; 89 return EINA_TRUE;
94 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_NO_REASON: 90 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_NO_REASON:
95 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_ABRUPTLY: 91 case EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_ABRUPTLY:
96 return EINA_FALSE; 92 return EINA_FALSE;
93 default:
94 break;
97 } 95 }
98 96
99 if ((r >= EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_START) && 97 if ((r >= EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_IANA_REGISTRY_START) &&
diff --git a/src/lib/ecore_con/efl_net_server_unix.c b/src/lib/ecore_con/efl_net_server_unix.c
index ed8735f..37d2c73 100644
--- a/src/lib/ecore_con/efl_net_server_unix.c
+++ b/src/lib/ecore_con/efl_net_server_unix.c
@@ -18,6 +18,26 @@
18#include <sys/un.h> 18#include <sys/un.h>
19#endif 19#endif
20 20
21// BSD workaround - unable to reproduce.... but we seem to
22// get a blocking bind here if 2 processes fight over the same
23// socket where one of them loses out by sitting here and
24// blockign forever - as i can't reproduce in the freebsd vm
25// i have, so i'm limited in what to do so this is a
26// workaround to try mitigate this
27#if defined (__FreeBSD__)
28# define BIND_HANG_WORKAROUND 1
29#else
30// only need on freebsd
31//# define BIND_HANG_WORKAROUND 1
32#endif
33
34#ifdef BIND_HANG_WORKAROUND
35# include <sys/file.h>
36# include <sys/types.h>
37# include <sys/stat.h>
38# include <fcntl.h>
39#endif
40
21/* no include EVIL as it's not supposed to be compiled on Windows */ 41/* no include EVIL as it's not supposed to be compiled on Windows */
22 42
23#define MY_CLASS EFL_NET_SERVER_UNIX_CLASS 43#define MY_CLASS EFL_NET_SERVER_UNIX_CLASS
@@ -25,10 +45,64 @@
25typedef struct _Efl_Net_Server_Unix_Data 45typedef struct _Efl_Net_Server_Unix_Data
26{ 46{
27 unsigned int leading_directories_create_mode; 47 unsigned int leading_directories_create_mode;
28 Eina_Bool leading_directories_create; 48#ifdef BIND_HANG_WORKAROUND
29 Eina_Bool unlink_before_bind; 49 int lock_fd;
50 Eina_Bool have_lock_fd : 1;
51#endif
52 Eina_Bool leading_directories_create : 1;
53 Eina_Bool unlink_before_bind : 1;
30} Efl_Net_Server_Unix_Data; 54} Efl_Net_Server_Unix_Data;
31 55
56#ifdef BIND_HANG_WORKAROUND
57static int
58_efl_net_server_unix_bind_hang_lock_workaround(const char *address, Eina_Bool lock, int lockfile_fd)
59{
60 size_t addrlen;
61 char *lockfile;
62 int ret;
63
64 addrlen = strlen(address);
65 lockfile = malloc(addrlen + 1 + 5);
66 if (!lockfile) return -1;
67
68 strcpy(lockfile, address);
69 strncpy(lockfile + addrlen, ".lock", 6);
70 if (lock)
71 {
72#ifdef HAVE_OPEN_CLOEXEC
73 lockfile_fd = open(lockfile, O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC,
74 S_IRUSR | S_IWUSR);
75 if (lockfile_fd < 0) return -1;
76#else
77 lockfile_fd = open(lockfile, O_RDWR | O_CREAT | O_TRUNC,
78 S_IRUSR | S_IWUSR);
79 if (lockfile_fd < 0) return -1;
80 eina_file_close_on_exec(lockfile_fd, EINA_TRUE);
81#endif
82 }
83
84 errno = 0;
85 if (lock)
86 {
87 ret = flock(lockfile_fd, LOCK_EX | LOCK_NB);
88 if ((ret != 0) && (errno == EWOULDBLOCK))
89 {
90 close(lockfile_fd);
91 lockfile_fd = -1;
92 }
93 }
94 else
95 {
96 flock(lockfile_fd, LOCK_UN | LOCK_NB);
97 unlink(lockfile);
98 close(lockfile_fd);
99 lockfile_fd = -1;
100 }
101 free(lockfile);
102 return lockfile_fd;
103}
104#endif
105
32EOLIAN static void 106EOLIAN static void
33_efl_net_server_unix_efl_object_destructor(Eo *o, Efl_Net_Server_Unix_Data *pd EINA_UNUSED) 107_efl_net_server_unix_efl_object_destructor(Eo *o, Efl_Net_Server_Unix_Data *pd EINA_UNUSED)
34{ 108{
@@ -38,7 +112,18 @@ _efl_net_server_unix_efl_object_destructor(Eo *o, Efl_Net_Server_Unix_Data *pd E
38 { 112 {
39 const char *address = efl_net_server_address_get(o); 113 const char *address = efl_net_server_address_get(o);
40 if ((address) && (strncmp(address, "abstract:", strlen("abstract:")) != 0)) 114 if ((address) && (strncmp(address, "abstract:", strlen("abstract:")) != 0))
41 unlink(address); 115 {
116 unlink(address);
117#ifdef BIND_HANG_WORKAROUND
118 if ((pd->have_lock_fd) && (pd->lock_fd >= 0))
119 {
120 _efl_net_server_unix_bind_hang_lock_workaround
121 (address, EINA_FALSE, pd->lock_fd);
122 pd->lock_fd = -1;
123 pd->have_lock_fd = EINA_FALSE;
124 }
125#endif
126 }
42 } 127 }
43 128
44 efl_destructor(efl_super(o, MY_CLASS)); 129 efl_destructor(efl_super(o, MY_CLASS));
@@ -101,6 +186,20 @@ _efl_net_server_unix_bind(Eo *o, Efl_Net_Server_Unix_Data *pd)
101 unlink(addr.sun_path); 186 unlink(addr.sun_path);
102 } 187 }
103 188
189#ifdef BIND_HANG_WORKAROUND
190 if (addr.sun_path[0] != '\0')
191 {
192 pd->lock_fd = _efl_net_server_unix_bind_hang_lock_workaround
193 (addr.sun_path, EINA_TRUE, -1);
194 if (pd->lock_fd < 0)
195 {
196 err = EADDRINUSE;
197 goto error;
198 }
199 pd->have_lock_fd = EINA_TRUE;
200 unlink(addr.sun_path);
201 }
202#endif
104 r = bind(fd, (struct sockaddr *)&addr, addrlen); 203 r = bind(fd, (struct sockaddr *)&addr, addrlen);
105 if (r != 0) 204 if (r != 0)
106 { 205 {
diff --git a/src/lib/ecore_con/efl_net_ssl_conn-openssl.c b/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
index fc8fb2e..8e7339c 100644
--- a/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
+++ b/src/lib/ecore_con/efl_net_ssl_conn-openssl.c
@@ -152,12 +152,18 @@ __efl_net_socket_bio_get(void)
152 if (efl_net_socket_bio) return efl_net_socket_bio; 152 if (efl_net_socket_bio) return efl_net_socket_bio;
153 efl_net_socket_bio = BIO_meth_new(0x400 /* 0x400 means source & sink */, 153 efl_net_socket_bio = BIO_meth_new(0x400 /* 0x400 means source & sink */,
154 "efl_net_socket wrapper"); 154 "efl_net_socket wrapper");
155 BIO_meth_set_write(efl_net_socket_bio, efl_net_socket_bio_write); 155 if (!efl_net_socket_bio) return NULL;
156 BIO_meth_set_read(efl_net_socket_bio, efl_net_socket_bio_read); 156 if (!BIO_meth_set_write(efl_net_socket_bio, efl_net_socket_bio_write)
157 BIO_meth_set_puts(efl_net_socket_bio, efl_net_socket_bio_puts); 157 || !BIO_meth_set_read(efl_net_socket_bio, efl_net_socket_bio_read)
158 BIO_meth_set_ctrl(efl_net_socket_bio, efl_net_socket_bio_ctrl); 158 || !BIO_meth_set_puts(efl_net_socket_bio, efl_net_socket_bio_puts)
159 BIO_meth_set_create(efl_net_socket_bio, efl_net_socket_bio_create); 159 || !BIO_meth_set_ctrl(efl_net_socket_bio, efl_net_socket_bio_ctrl)
160 BIO_meth_set_destroy(efl_net_socket_bio, efl_net_socket_bio_destroy); 160 || !BIO_meth_set_create(efl_net_socket_bio, efl_net_socket_bio_create)
161 || !BIO_meth_set_destroy(efl_net_socket_bio, efl_net_socket_bio_destroy))
162 {
163 BIO_meth_free(efl_net_socket_bio);
164 efl_net_socket_bio = NULL;
165 return NULL;
166 }
161 // FIXME: some day we need to clean up, but for now a singleton alloc is ok 167 // FIXME: some day we need to clean up, but for now a singleton alloc is ok
162 // BIO_meth_free(efl_net_socket_bio); 168 // BIO_meth_free(efl_net_socket_bio);
163 return efl_net_socket_bio; 169 return efl_net_socket_bio;
diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c
index 1942236..390ddd4 100644
--- a/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -20,6 +20,8 @@ _ecore_evas_buffer_free(Ecore_Evas *ee)
20{ 20{
21 Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data; 21 Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data;
22 22
23 ecore_evas_input_event_unregister(ee);
24
23 if (!bdata) return; 25 if (!bdata) return;
24 if (bdata->image) 26 if (bdata->image)
25 { 27 {
diff --git a/src/lib/ecore_imf/Ecore_IMF.h b/src/lib/ecore_imf/Ecore_IMF.h
index dc6065f..4cfb488 100644
--- a/src/lib/ecore_imf/Ecore_IMF.h
+++ b/src/lib/ecore_imf/Ecore_IMF.h
@@ -33,7 +33,7 @@
33extern "C" { 33extern "C" {
34#endif 34#endif
35 35
36#define ECORE_IMF_INPUT_HINT_AUTOFILL_MASK 0xff00 36#define ECORE_IMF_INPUT_HINT_AUTOFILL_MASK 0xff00 /* @deprecated since 1.24 */
37 37
38/** 38/**
39 * @defgroup Ecore_IMF_Lib_Group Ecore_IMF - Ecore Input Method Library Functions 39 * @defgroup Ecore_IMF_Lib_Group Ecore_IMF - Ecore Input Method Library Functions
@@ -413,17 +413,17 @@ typedef enum
413 ECORE_IMF_INPUT_HINT_AUTO_COMPLETE = 1 << 0, /**< Suggest word auto completion @since 1.12 */ 413 ECORE_IMF_INPUT_HINT_AUTO_COMPLETE = 1 << 0, /**< Suggest word auto completion @since 1.12 */
414 ECORE_IMF_INPUT_HINT_SENSITIVE_DATA = 1 << 1, /**< Typed text should not be stored. @since 1.12 */ 414 ECORE_IMF_INPUT_HINT_SENSITIVE_DATA = 1 << 1, /**< Typed text should not be stored. @since 1.12 */
415 ECORE_IMF_INPUT_HINT_MULTILINE = 1 << 2, /**< Multiline text @since 1.18 */ 415 ECORE_IMF_INPUT_HINT_MULTILINE = 1 << 2, /**< Multiline text @since 1.18 */
416 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE = 0x100, /**< Autofill hint for a credit card expiration date @since 1.21 */ 416 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE = 0x100, /**< Autofill hint for a credit card expiration date @deprecated since 1.24 */
417 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DAY = 0x200, /**< Autofill hint for a credit card expiration day @since 1.21 */ 417 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_DAY = 0x200, /**< Autofill hint for a credit card expiration day @deprecated since 1.24 */
418 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_MONTH = 0x300, /**< Autofill hint for a credit card expiration month @since 1.21 */ 418 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_MONTH = 0x300, /**< Autofill hint for a credit card expiration month @deprecated since 1.24 */
419 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_YEAR = 0x400, /**< Autofill hint for a credit card expiration year @since 1.21 */ 419 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_EXPIRATION_YEAR = 0x400, /**< Autofill hint for a credit card expiration year @deprecated since 1.24 */
420 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_NUMBER = 0x500, /**< Autofill hint for a credit card number @since 1.21 */ 420 ECORE_IMF_INPUT_HINT_AUTOFILL_CREDIT_CARD_NUMBER = 0x500, /**< Autofill hint for a credit card number @deprecated since 1.24 */
421 ECORE_IMF_INPUT_HINT_AUTOFILL_EMAIL_ADDRESS = 0x600, /**< Autofill hint for an email address @since 1.21 */ 421 ECORE_IMF_INPUT_HINT_AUTOFILL_EMAIL_ADDRESS = 0x600, /**< Autofill hint for an email address @deprecated since 1.24 */
422 ECORE_IMF_INPUT_HINT_AUTOFILL_NAME = 0x700, /**< Autofill hint for a user's real name @since 1.21 */ 422 ECORE_IMF_INPUT_HINT_AUTOFILL_NAME = 0x700, /**< Autofill hint for a user's real name @deprecated since 1.24 */
423 ECORE_IMF_INPUT_HINT_AUTOFILL_PHONE = 0x800, /**< Autofill hint for a phone number @since 1.21 */ 423 ECORE_IMF_INPUT_HINT_AUTOFILL_PHONE = 0x800, /**< Autofill hint for a phone number @deprecated since 1.24 */
424 ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_ADDRESS = 0x900, /**< Autofill hint for a postal address @since 1.21 */ 424 ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_ADDRESS = 0x900, /**< Autofill hint for a postal address @deprecated since 1.24 */
425 ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_CODE = 0xA00, /**< Autofill hint for a postal code @since 1.21 */ 425 ECORE_IMF_INPUT_HINT_AUTOFILL_POSTAL_CODE = 0xA00, /**< Autofill hint for a postal code @deprecated since 1.24 */
426 ECORE_IMF_INPUT_HINT_AUTOFILL_ID = 0xB00 /**< Autofill hint for a user's ID @since 1.21 */ 426 ECORE_IMF_INPUT_HINT_AUTOFILL_ID = 0xB00 /**< Autofill hint for a user's ID @deprecated since 1.24 */
427} Ecore_IMF_Input_Hints; 427} Ecore_IMF_Input_Hints;
428 428
429/** 429/**
diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h
index 0631a5f..c68890c 100644
--- a/src/lib/ecore_wl2/Ecore_Wl2.h
+++ b/src/lib/ecore_wl2/Ecore_Wl2.h
@@ -452,9 +452,7 @@ typedef struct _Ecore_Wl2_Surface_Interface
452 * @li @ref Ecore_Wl2_Display_Group 452 * @li @ref Ecore_Wl2_Display_Group
453 * @li @ref Ecore_Wl2_Window_Group 453 * @li @ref Ecore_Wl2_Window_Group
454 * @li @ref Ecore_Wl2_Output_Group 454 * @li @ref Ecore_Wl2_Output_Group
455 * @li @ref Ecore_Wl2_Dnd_Group
456 * @li @ref Ecore_Wl2_Input_Group 455 * @li @ref Ecore_Wl2_Input_Group
457 * @li @ref Ecore_Wl2_Subsurface_Group
458 */ 456 */
459 457
460/** 458/**
@@ -553,20 +551,6 @@ EAPI Ecore_Wl2_Display *ecore_wl2_display_connect(const char *name);
553EAPI void ecore_wl2_display_disconnect(Ecore_Wl2_Display *display); 551EAPI void ecore_wl2_display_disconnect(Ecore_Wl2_Display *display);
554 552
555/** 553/**
556 * Terminate a Wayland display's main loop
557 *
558 * @brief This function is typically used by servers to terminate the
559 * Wayland display main loop. This is usually only called when a server
560 * encounters an error.
561 *
562 * @param display The Ecore_Wl2_Display to terminate
563 *
564 * @ingroup Ecore_Wl2_Display_Group
565 * @since 1.17
566 */
567EAPI void ecore_wl2_display_terminate(Ecore_Wl2_Display *display);
568
569/**
570 * Retrieve the existing Wayland display 554 * Retrieve the existing Wayland display
571 * 555 *
572 * @param display The Ecore_Wl2_Display for which to retrieve the existing 556 * @param display The Ecore_Wl2_Display for which to retrieve the existing
@@ -730,15 +714,15 @@ EAPI Ecore_Wl2_Window *ecore_wl2_display_window_find_by_surface(Ecore_Wl2_Displa
730 * Gets the connected display object 714 * Gets the connected display object
731 * 715 *
732 * @brief This function is typically used by clients to get an 716 * @brief This function is typically used by clients to get an
733 * existing Wayland display. 717 * existing Wayland display.
734 * 718 *
735 * @param name The display target name. If @c NULL, the default 719 * @param name The display target name. If @c NULL, the default
736 * display is assumed. 720 * display is assumed.
737 * 721 *
738 * @return The Ecore_Wl2_Display which was connected to 722 * @return The Ecore_Wl2_Display which was connected to
739 * 723 *
740 * @ingroup Ecore_Wl2_Display_Group 724 * @ingroup Ecore_Wl2_Display_Group
741 * @since 1.24 725 * @since 1.24
742 */ 726 */
743EAPI Ecore_Wl2_Display *ecore_wl2_connected_display_get(const char *name); 727EAPI Ecore_Wl2_Display *ecore_wl2_connected_display_get(const char *name);
744 728
@@ -918,6 +902,20 @@ EAPI void ecore_wl2_window_alpha_set(Ecore_Wl2_Window *window, Eina_Bool alpha);
918EAPI void ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h); 902EAPI void ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
919 903
920/** 904/**
905 * Get the opaque region of the Ecore_Wl2_Window
906 *
907 * @param win The window
908 * @param x The left point of the region.
909 * @param y The top point of the region.
910 * @param w The width of the region.
911 * @param h The height of the region.
912 *
913 * @ingroup Ecore_Wl2_Window_Group
914 * @since 1.24
915 */
916EAPI void ecore_wl2_window_opaque_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h);
917
918/**
921 * Set the input region of the Ecore_Wl2_Window. 919 * Set the input region of the Ecore_Wl2_Window.
922 * 920 *
923 * To set an empty region, pass width and height as 0. 921 * To set an empty region, pass width and height as 0.
@@ -936,6 +934,20 @@ EAPI void ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, in
936EAPI void ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h); 934EAPI void ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
937 935
938/** 936/**
937 * Get the input region of the Ecore_Wl2_Window.
938 *
939 * @param window The window to set the input region of
940 * @param x The left point of the region.
941 * @param y The top point of the region.
942 * @param w The width of the region.
943 * @param h The height of the region.
944 *
945 * @ingroup Ecore_Wl2_Window_Group
946 * @since 1.24
947 */
948EAPI void ecore_wl2_window_input_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h);
949
950/**
939 * Get if a given window is maximized 951 * Get if a given window is maximized
940 * 952 *
941 * @param window The window to get the maximized state of 953 * @param window The window to get the maximized state of
@@ -1088,17 +1100,6 @@ EAPI void ecore_wl2_window_geometry_get(Ecore_Wl2_Window *window, int *x, int *y
1088EAPI void ecore_wl2_window_geometry_set(Ecore_Wl2_Window *window, int x, int y, int w, int h); 1100EAPI void ecore_wl2_window_geometry_set(Ecore_Wl2_Window *window, int x, int y, int w, int h);
1089 1101
1090/** 1102/**
1091 * Iconify a window
1092 *
1093 * @param win The window to iconifiy
1094 * @param iconified The new iconified state to set
1095 *
1096 * @ingroup Ecore_Wl2_Window_Group
1097 * @since 1.17
1098 */
1099EAPI void ecore_wl2_window_iconified_set(Ecore_Wl2_Window *window, Eina_Bool iconified);
1100
1101/**
1102 * Set the type of a given window 1103 * Set the type of a given window
1103 * 1104 *
1104 * @param window The window to set the type of 1105 * @param window The window to set the type of
@@ -1227,54 +1228,6 @@ EAPI void ecore_wl2_window_available_rotations_set(Ecore_Wl2_Window *window, con
1227EAPI Eina_Bool ecore_wl2_window_available_rotations_get(Ecore_Wl2_Window *window, int **rots, unsigned int *count); 1228EAPI Eina_Bool ecore_wl2_window_available_rotations_get(Ecore_Wl2_Window *window, int **rots, unsigned int *count);
1228 1229
1229/** 1230/**
1230 * Get list of supported auxiliary window hints
1231 *
1232 * @param window
1233 *
1234 * @return An Eina_List of supported auxiliary hints, or NULL otherwise
1235 *
1236 * @ingroup Ecore_Wl2_Window_Group
1237 * @since 1.20
1238 */
1239EAPI Eina_List *ecore_wl2_window_aux_hints_supported_get(Ecore_Wl2_Window *window);
1240
1241/**
1242 * Add a supported auxiliary hint to a given window
1243 *
1244 * @param window
1245 * @param id
1246 * @param hint
1247 * @param val
1248 *
1249 * @ingroup Ecore_Wl2_Window_Group
1250 * @since 1.20
1251 */
1252EAPI void ecore_wl2_window_aux_hint_add(Ecore_Wl2_Window *window, int id, const char *hint, const char *val);
1253
1254/**
1255 * Change an auxiliary hint on a given window
1256 *
1257 * @param window
1258 * @param id
1259 * @param val
1260 *
1261 * @ingroup Ecore_Wl2_Window_Group
1262 * @since 1.20
1263 */
1264EAPI void ecore_wl2_window_aux_hint_change(Ecore_Wl2_Window *window, int id, const char *val);
1265
1266/**
1267 * Delete an auxiliary hint on a given window
1268 *
1269 * @param window
1270 * @param id
1271 *
1272 * @ingroup Ecore_Wl2_Window_Group
1273 * @since 1.20
1274 */
1275EAPI void ecore_wl2_window_aux_hint_del(Ecore_Wl2_Window *window, int id);
1276
1277/**
1278 * @brief Get the activated state of a window 1231 * @brief Get the activated state of a window
1279 * 1232 *
1280 * @param window The window to get activated state from 1233 * @param window The window to get activated state from
@@ -1301,6 +1254,18 @@ EAPI Eina_Bool ecore_wl2_window_activated_get(const Ecore_Wl2_Window *window);
1301EAPI void ecore_wl2_window_popup_input_set(Ecore_Wl2_Window *window, Ecore_Wl2_Input *input); 1254EAPI void ecore_wl2_window_popup_input_set(Ecore_Wl2_Window *window, Ecore_Wl2_Input *input);
1302 1255
1303/** 1256/**
1257 * @brief Get the seat for a popup window to be used with grab
1258 *
1259 * @param window The window
1260 *
1261 * @return Returns Ecore_Wl2_Input if the window has an input.
1262 *
1263 * @ingroup Ecore_Wl2_Window_Group
1264 * @since 1.24
1265 */
1266EAPI Ecore_Wl2_Input *ecore_wl2_window_popup_input_get(Ecore_Wl2_Window *window);
1267
1268/**
1304 * Check if a window has a shell surface - without one it can't be visible. 1269 * Check if a window has a shell surface - without one it can't be visible.
1305 * 1270 *
1306 * @param The window to check 1271 * @param The window to check
@@ -1496,17 +1461,15 @@ EAPI Eina_Stringshare *ecore_wl2_input_name_get(Ecore_Wl2_Input *input);
1496EAPI Eina_Bool ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay); 1461EAPI Eina_Bool ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay);
1497 1462
1498/** 1463/**
1499 * Get the Evas_Device for the seat belonging to a window from an input 1464 * Set the keyboard repeat rate and delay of an input
1500 *
1501 * @param input The input 1465 * @param input The input
1502 * @param window The window 1466 * @param rate Pointer to store the repeat rate (in seconds)
1503 * 1467 * @param rate Pointer to store the repeat delay (in seconds)
1504 * @return The device object 1468 * @return True if repeat is enabled
1505 *
1506 * @ingroup Ecore_Wl2_Input_Group 1469 * @ingroup Ecore_Wl2_Input_Group
1507 * @since 1.20 1470 * @since 1.24
1508 */ 1471 */
1509EAPI Eo *ecore_wl2_input_seat_device_get(const Ecore_Wl2_Input *input, const Ecore_Wl2_Window *window); 1472EAPI Eina_Bool ecore_wl2_input_keyboard_repeat_set(Ecore_Wl2_Input *input, double rate, double delay);
1510 1473
1511/** 1474/**
1512 * Retrieves the mouse position of the seat 1475 * Retrieves the mouse position of the seat
@@ -1550,254 +1513,14 @@ EAPI void ecore_wl2_input_pointer_set(Ecore_Wl2_Input *input, struct wl_surface
1550EAPI void ecore_wl2_input_cursor_from_name_set(Ecore_Wl2_Input *input, const char *cursor); 1513EAPI void ecore_wl2_input_cursor_from_name_set(Ecore_Wl2_Input *input, const char *cursor);
1551 1514
1552/** 1515/**
1553 * @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions 1516 * Gets default input of a given display
1554 * @ingroup Ecore_Wl2_Group
1555 *
1556 * Functions that deal with creating, destroying, or interacting with
1557 * Wayland Drag-n-Drop
1558 */
1559
1560/**
1561 * Set the types which are supported by a possible drag and drop operation.
1562 * This call initializes a data source and offeres the given mimetypes
1563 *
1564 * @param input the input where to add on the data source
1565 * @param types a null-terminated array of mimetypes
1566 *
1567 * @ingroup Ecore_Wl2_Dnd_Group
1568 * @since 1.17
1569 */
1570EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
1571
1572/**
1573 * Start a drag on the given input
1574 *
1575 * @param input the input to use
1576 * @param window the window which is the origin of the drag operation
1577 * @param drag_window the window which is used as window of the visible hint.
1578 *
1579 * @return The serial for the start_drag request
1580 *
1581 * @ingroup Ecore_Wl2_Dnd_Group
1582 * @since 1.17
1583 */
1584EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
1585
1586/**
1587 * Call wl_data_source.set_actions on an existing source
1588 *
1589 * @param input the input to use
1590 *
1591 * @see ecore_wl2_dnd_drag_start for a more useful function.
1592 *
1593 * @ingroup Ecore_Wl2_Dnd_Group
1594 * @since 1.20
1595 */
1596EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
1597
1598/**
1599 * End a drag started by a call to ecore_wl2_dnd_drag_start
1600 *
1601 * @param input the input object on which the drag was started
1602 *
1603 * @ingroup Ecore_Wl2_Dnd_Group
1604 * @since 1.17
1605 */
1606EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
1607
1608/**
1609 * Get the offer which is currently resposible for the clipboard
1610 *
1611 * @param input the input object to use
1612 *
1613 * @ingroup Ecore_Wl2_Dnd_Group
1614 * @since 1.19
1615 */
1616EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
1617
1618/**
1619 * Set the types which are available from this client
1620 * Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
1621 * where the caller of this api must write the data (encoded in the given mimetype) to the fd
1622 *
1623 * @param input the input to provice this types on
1624 * @param types a null-terminated array of mimetypes supported by the client
1625 *
1626 * @return serial of request on success, 0 on failure
1627 *
1628 * @ingroup Ecore_Wl2_Dnd_Group
1629 * @since 1.17
1630 */
1631EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
1632
1633/**
1634 * Clear the selection currently setted on this input.
1635 *
1636 * @param input the input to clear
1637 *
1638 * @return serial of request on success, 0 on failure
1639 *
1640 * @ingroup Ecore_Wl2_Dnd_Group
1641 * @since 1.17
1642 */
1643EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
1644
1645/**
1646 * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces.
1647 * @ingroup Ecore_Wl2_Group
1648 *
1649 * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface.
1650 *
1651 * This API is intended to expose Wayland subsurface functionality, although it
1652 * should not be necessary for most applications to use it, as soon as we have
1653 * means to make Evas automatically switch Evas images to use subsurfaces.
1654 *
1655 * It can/should be used, for instance, when subsurfaces are needed to be not
1656 * in sync with the main window surface.
1657 */
1658
1659/**
1660 * Create and return a new subsurface.
1661 *
1662 * Create a new surface (and subsurface interface), with the parent surface
1663 * being the one associated with the given @param win.
1664 *
1665 * The @param win must be visible, otherwise there will be no surface created
1666 * for it yet.
1667 *
1668 * @return the allocated and initialized Ecore_Wl2_Subsurface object, or
1669 * NULL on failure
1670 *
1671 * @ingroup Ecore_Wl2_Subsurface_Group
1672 * @since 1.17
1673 */
1674EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window);
1675
1676/**
1677 * Destroy the given subsurface, as well as the surface associated with it.
1678 *
1679 * @param subsurface the subsurface
1680 *
1681 * @ingroup Ecore_Wl2_Subsurface_Group
1682 * @since 1.17
1683 */
1684EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface);
1685
1686/**
1687 * Get the wl_surface for this subsurface
1688 *
1689 * @param subsurface the subsurface
1690 *
1691 * @return the wl_surface associated with this subsurface, or NULL on failure
1692 *
1693 * @ingroup Ecore_Wl2_Subsurface_Group
1694 * @since 1.17
1695 */
1696EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface);
1697
1698/**
1699 * Set the position of this subsurface, relative to its parent surface.
1700 * If subsurface is defined and the x, y coordinates differ from the currently
1701 * tracked position, this also schedules a sub-surface position change.
1702 *
1703 * @param subsurface the subsurface
1704 * @param x coordinate in the parent surface
1705 * @param y coordinate in the parent surface
1706 *
1707 * @ingroup Ecore_Wl2_Subsurface_Group
1708 * @since 1.17
1709 */
1710EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y);
1711
1712/**
1713 * Get the position of this subsurface, relative to its parent surface.
1714 * Coordinates will be returned in x and y if non-NULL.
1715 *
1716 * @param subsurface the subsurface
1717 * @param x coordinate in the parent surface, or NULL to ignore
1718 * @param y coordinate in the parent surface, or NULL to ignore
1719 *
1720 * @ingroup Ecore_Wl2_Subsurface_Group
1721 * @since 1.17
1722 */
1723EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y);
1724
1725/**
1726 * Place subsurface on layer above a reference surface
1727 *
1728 * Moves the @param subsurface to just above the reference @param
1729 * surface, changing the z-order. The reference @param surface must
1730 * be either a sibling or parent surface, else a protocol error will
1731 * be generated.
1732 *
1733 * @param subsurface the subsurface
1734 * @param surface the sibling reference surface
1735 *
1736 * @ingroup Ecore_Wl2_Subsurface_Group
1737 * @since 1.17
1738 */
1739EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
1740
1741/**
1742 * Place subsurface on layer below a reference surface
1743 *
1744 * See ecore_wl2_subsurface_place_above.
1745 *
1746 * @param subsurface the subsurface
1747 * @param surface the sibling reference surface
1748 *
1749 * @ingroup Ecore_Wl2_Subsurface_Group
1750 * @since 1.17
1751 */
1752EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
1753
1754/**
1755 * Enables or disables sub-surface synchronization
1756 *
1757 * When synchronization is enabled, surface commits on the subsurface
1758 * will be cached and only applied when the parent surface's state is
1759 * applied. This ensures atomic updates of the parent and all of its
1760 * synchronized sub-surfaces.
1761 *
1762 * When synchronization is disabled, commits will apply to the pending
1763 * state directly without caching, just like a normal wl_surface. If
1764 * there are already cached events when this is set, those events are
1765 * applied simultaneously with the desync event.
1766 *
1767 * Attempting to enable synchronization when the subsurface already
1768 * thinks it's sync'd, or desync when it believes its desync'd, will
1769 * be trivially ignored and will not generate a Wayland event.
1770 * 1517 *
1771 * See Wayland's set_desync documentation for further details and 1518 * @param display The display
1772 * exceptional cases.
1773 *
1774 * @param subsurface the subsurface
1775 * @param sync true to enable synchronization, false to desynchronize
1776 *
1777 * @ingroup Ecore_Wl2_Subsurface_Group
1778 * @since 1.17
1779 */
1780EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync);
1781
1782/**
1783 * Set an opaque region for the given subsurface.
1784 *
1785 * This is an optimization hint to the compositor to allow it avoid
1786 * redrawing content unnecessarily. Note that marking transparent
1787 * content as opaque will cause repaint artifacts.
1788 *
1789 * Use a 0x0 region size to unset the opaque region.
1790 *
1791 * @param subsurface the subsurface
1792 * @param x coordinate in the parent surface
1793 * @param y coordinate in the parent surface
1794 * @param w width to set as opaque
1795 * @param h height to set as opaque
1796 * 1519 *
1797 * @ingroup Ecore_Wl2_Subsurface_Group 1520 * @ingroup Ecore_Wl2_Input_Group
1798 * @since 1.17 1521 * @since 1.24
1799 */ 1522 */
1800EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h); 1523EAPI Ecore_Wl2_Input *ecore_wl2_input_default_input_get(const Ecore_Wl2_Display *ewd);
1801 1524
1802/** 1525/**
1803 * @defgroup Ecore_Wl2_Output_Group Wayland Library Output Functions 1526 * @defgroup Ecore_Wl2_Output_Group Wayland Library Output Functions
@@ -1848,136 +1571,6 @@ EAPI int ecore_wl2_output_transform_get(Ecore_Wl2_Output *output);
1848EAPI int ecore_wl2_display_compositor_version_get(Ecore_Wl2_Display *disp); 1571EAPI int ecore_wl2_display_compositor_version_get(Ecore_Wl2_Display *disp);
1849 1572
1850/** 1573/**
1851 * Get the actions available from the data source
1852 *
1853 * @param offer Offer object to use
1854 *
1855 * @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
1856 *
1857 * @ingroup Ecore_Wl2_Dnd_Group
1858 * @since 1.19
1859 */
1860EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
1861
1862/**
1863 * Set the actions which are supported by you
1864 *
1865 * @param offer Offer object to use
1866 * @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
1867 * @param action the preferred action out of the actions
1868 *
1869 * @ingroup Ecore_Wl2_Dnd_Group
1870 * @since 1.19
1871 */
1872EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
1873
1874/**
1875 * Get action which is set by either the data source or in the last call of actions_set
1876 *
1877 * @param offer Offer object to use
1878 *
1879 * @return the preferred action
1880 *
1881 * @ingroup Ecore_Wl2_Dnd_Group
1882 * @since 1.19
1883 */
1884EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
1885
1886/**
1887 * Get the mime types which are given by the source
1888 *
1889 * @param offer the offer to query
1890 *
1891 * @return a eina array of strdup´ed strings, this array must NOT be changed or freed
1892 *
1893 * @ingroup Ecore_Wl2_Dnd_Group
1894 * @since 1.19
1895 */
1896EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
1897
1898/**
1899 * Set mimetypes you are accepting under this offer
1900 *
1901 * @param offer the offer to use
1902 *
1903 * @ingroup Ecore_Wl2_Dnd_Group
1904 * @since 1.19
1905 */
1906EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
1907
1908/**
1909 * Accept a single mime type for an offer
1910 *
1911 * @param offer the offer to use
1912 * @param mime_type the mime type
1913 *
1914 * @ingroup Ecore_Wl2_Dnd_Group
1915 * @since 1.20
1916 */
1917EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
1918
1919/**
1920 * Request the data from this offer.
1921 * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
1922 * There offer will be not destroyed as long as requested data is not emitted by the event.
1923 *
1924 * @param offer the offer to use
1925 * @param mime the mimetype to receive
1926 *
1927 * @ingroup Ecore_Wl2_Dnd_Group
1928 * @since 1.19
1929 */
1930EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
1931
1932/**
1933 * Request the data from this offer on an externally managed fd.
1934 * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
1935 * There offer will be not destroyed as long as requested data is not emitted by the event.
1936 *
1937 * @param offer the offer to use
1938 * @param mime the mimetype to receive
1939 * @param fd the fd to pass for receiving
1940 *
1941 * @ingroup Ecore_Wl2_Dnd_Group
1942 * @since 1.20
1943 */
1944EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
1945
1946/**
1947 * End the use of a proxy received offer. This may invalidate the offer object
1948 *
1949 * @param offer the offer
1950 *
1951 * @ingroup Ecore_Wl2_Dnd_Group
1952 * @since 1.20
1953 */
1954EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
1955
1956/**
1957 * Check if the given offer supports the given mimetype
1958 *
1959 * @param offer the offer to use
1960 * @param mime the mimetype to check
1961 *
1962 * @return Returns true if the mimetype is supported by this offer, false if not
1963 *
1964 * @ingroup Ecore_Wl2_Dnd_Group
1965 * @since 1.19
1966 */
1967EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
1968
1969/**
1970 * Mark this offer as finished
1971 * This will call the dnd_finished event on the source of the sender.
1972 *
1973 * @param offer the offer to use
1974 *
1975 * @ingroup Ecore_Wl2_Dnd_Group
1976 * @since 1.19
1977 */
1978EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer);
1979
1980/**
1981 * Disable session recovery for any further connections. Must be called 1574 * Disable session recovery for any further connections. Must be called
1982 * before connecting. This is irreversible and not intended for general 1575 * before connecting. This is irreversible and not intended for general
1983 * use. 1576 * use.
@@ -2004,20 +1597,6 @@ EAPI void ecore_wl2_session_recovery_disable(void);
2004EAPI void ecore_wl2_window_commit(Ecore_Wl2_Window *window, Eina_Bool flush); 1597EAPI void ecore_wl2_window_commit(Ecore_Wl2_Window *window, Eina_Bool flush);
2005 1598
2006/** 1599/**
2007 * Check if a wayland window's surface is in the pending state.
2008 *
2009 * A surface is pending if it's been commit but we haven't received a
2010 * frame callback for it yet. This mean's we're not ready to draw yet.
2011 *
2012 * @param window The window whose surface we want to check
2013 *
2014 * @return whether the window's surface is pending or not.
2015 *
2016 * @since 1.21
2017 */
2018EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
2019
2020/**
2021 * Add a callback that fires when the window's surface_frame callback fires 1600 * Add a callback that fires when the window's surface_frame callback fires
2022 * 1601 *
2023 * @param window The window to add a callback on 1602 * @param window The window to add a callback on
diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c
index d14b14a..33e0687 100644
--- a/src/lib/ecore_wl2/ecore_wl2.c
+++ b/src/lib/ecore_wl2/ecore_wl2.c
@@ -90,8 +90,6 @@ _ecore_wl2_surface_modules_init(void)
90 local_module = NULL; 90 local_module = NULL;
91 return EINA_FALSE; 91 return EINA_FALSE;
92 } 92 }
93 eina_module_free(local_module);
94 local_module = NULL;
95 return EINA_TRUE; 93 return EINA_TRUE;
96 } 94 }
97 } 95 }
diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c
index 67a2dcb..0d7aaaa 100644
--- a/src/lib/ecore_wl2/ecore_wl2_input.c
+++ b/src/lib/ecore_wl2/ecore_wl2_input.c
@@ -1173,8 +1173,11 @@ _keyboard_cb_repeat_setup(void *data, struct wl_keyboard *keyboard EINA_UNUSED,
1173 } 1173 }
1174 1174
1175 input->repeat.enabled = EINA_TRUE; 1175 input->repeat.enabled = EINA_TRUE;
1176 input->repeat.rate = (1.0 / rate); 1176 if (!input->repeat.changed)
1177 input->repeat.delay = (delay / 1000.0); 1177 {
1178 input->repeat.rate = (1.0 / rate);
1179 input->repeat.delay = (delay / 1000.0);
1180 }
1178 ev = malloc(sizeof(Ecore_Wl2_Event_Seat_Keymap_Changed)); 1181 ev = malloc(sizeof(Ecore_Wl2_Event_Seat_Keymap_Changed));
1179 if (ev) 1182 if (ev)
1180 { 1183 {
@@ -1215,7 +1218,7 @@ _touch_cb_down(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int seri
1215 1218
1216 _pointer_cb_enter(data, NULL, serial, surface, x, y); 1219 _pointer_cb_enter(data, NULL, serial, surface, x, y);
1217 1220
1218 if ((!input->grab.window) && (input->focus.touch)) 1221 if ((!input->grab.window) && (input->focus.touch) && input->grab.touch_count == 1)
1219 { 1222 {
1220 _ecore_wl2_input_grab(input, input->focus.touch, BTN_LEFT); 1223 _ecore_wl2_input_grab(input, input->focus.touch, BTN_LEFT);
1221 input->grab.timestamp = timestamp; 1224 input->grab.timestamp = timestamp;
@@ -1232,7 +1235,7 @@ _touch_cb_up(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int serial
1232 1235
1233 input = data; 1236 input = data;
1234 if (!input) return; 1237 if (!input) return;
1235 if (!input->focus.touch) return; 1238 EINA_SAFETY_ON_NULL_RETURN(input->focus.touch); //if this is happening, then we are getting up events in a invalid state
1236 1239
1237 input->timestamp = timestamp; 1240 input->timestamp = timestamp;
1238 input->display->serial = serial; 1241 input->display->serial = serial;
@@ -1243,7 +1246,7 @@ _touch_cb_up(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int serial
1243 if (input->grab.count) input->grab.count--; 1246 if (input->grab.count) input->grab.count--;
1244 if (input->grab.touch_count) input->grab.touch_count--; 1247 if (input->grab.touch_count) input->grab.touch_count--;
1245 if ((input->grab.window) && (input->grab.button == BTN_LEFT) && 1248 if ((input->grab.window) && (input->grab.button == BTN_LEFT) &&
1246 (!input->grab.count)) 1249 (!input->grab.count) && !input->grab.touch_count)
1247 _ecore_wl2_input_ungrab(input); 1250 _ecore_wl2_input_ungrab(input);
1248 1251
1249 if (input->grab.touch_count == 0) input->focus.touch = NULL; 1252 if (input->grab.touch_count == 0) input->focus.touch = NULL;
@@ -1615,6 +1618,7 @@ _ecore_wl2_input_add(Ecore_Wl2_Display *display, unsigned int id, unsigned int v
1615 input->repeat.rate = 0.025; 1618 input->repeat.rate = 0.025;
1616 input->repeat.delay = 0.4; 1619 input->repeat.delay = 0.4;
1617 input->repeat.enabled = EINA_TRUE; 1620 input->repeat.enabled = EINA_TRUE;
1621 input->repeat.changed = EINA_FALSE;
1618 1622
1619 wl_array_init(&input->data.selection.types); 1623 wl_array_init(&input->data.selection.types);
1620 wl_array_init(&input->data.drag.types); 1624 wl_array_init(&input->data.drag.types);
@@ -1814,25 +1818,26 @@ ecore_wl2_input_keymap_get(const Ecore_Wl2_Input *input)
1814} 1818}
1815 1819
1816EAPI Eina_Bool 1820EAPI Eina_Bool
1817ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay) 1821ecore_wl2_input_keyboard_repeat_set(Ecore_Wl2_Input *input, double rate, double delay)
1818{ 1822{
1819 EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE); 1823 EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE);
1820 EINA_SAFETY_ON_NULL_RETURN_VAL(input->display, EINA_FALSE); 1824 EINA_SAFETY_ON_NULL_RETURN_VAL(input->display, EINA_FALSE);
1821 EINA_SAFETY_ON_FALSE_RETURN_VAL(input->wl.keyboard, EINA_FALSE); 1825 EINA_SAFETY_ON_FALSE_RETURN_VAL(input->wl.keyboard, EINA_FALSE);
1822 if (rate) *rate = input->repeat.rate; 1826 input->repeat.rate = rate;
1823 if (delay) *delay = input->repeat.delay; 1827 input->repeat.delay = delay;
1828 input->repeat.changed = EINA_TRUE;
1824 return input->repeat.enabled; 1829 return input->repeat.enabled;
1825} 1830}
1826 1831
1827EAPI Eo * 1832EAPI Eina_Bool
1828ecore_wl2_input_seat_device_get(const Ecore_Wl2_Input *input, const Ecore_Wl2_Window *window) 1833ecore_wl2_input_keyboard_repeat_get(const Ecore_Wl2_Input *input, double *rate, double *delay)
1829{ 1834{
1830 Ecore_Wl2_Input_Devices *devices; 1835 EINA_SAFETY_ON_NULL_RETURN_VAL(input, EINA_FALSE);
1831 EINA_SAFETY_ON_NULL_RETURN_VAL(input, NULL); 1836 EINA_SAFETY_ON_NULL_RETURN_VAL(input->display, EINA_FALSE);
1832 EINA_SAFETY_ON_NULL_RETURN_VAL(window, NULL); 1837 EINA_SAFETY_ON_FALSE_RETURN_VAL(input->wl.keyboard, EINA_FALSE);
1833 1838 if (rate) *rate = input->repeat.rate;
1834 devices = _ecore_wl2_devices_get(input, window); 1839 if (delay) *delay = input->repeat.delay;
1835 return devices ? devices->seat_dev : NULL; 1840 return input->repeat.enabled;
1836} 1841}
1837 1842
1838EAPI void 1843EAPI void
@@ -1866,3 +1871,17 @@ ecore_wl2_input_pointer_xy_get(const Ecore_Wl2_Input *input, int *x, int *y)
1866 if (y) *y = input->pointer.sy; 1871 if (y) *y = input->pointer.sy;
1867 return EINA_TRUE; 1872 return EINA_TRUE;
1868} 1873}
1874
1875EAPI Ecore_Wl2_Input *
1876ecore_wl2_input_default_input_get(const Ecore_Wl2_Display *ewd)
1877{
1878 Ecore_Wl2_Input *input;
1879
1880 EINA_SAFETY_ON_NULL_RETURN_VAL(ewd, NULL);
1881 EINA_SAFETY_ON_NULL_RETURN_VAL(ewd->inputs, NULL);
1882
1883 input = ecore_wl2_display_input_find_by_name(ewd, "seat0");
1884 if (!input) input = ecore_wl2_display_input_find_by_name(ewd, "default");
1885
1886 return input;
1887}
diff --git a/src/lib/ecore_wl2/ecore_wl2_internal.h b/src/lib/ecore_wl2/ecore_wl2_internal.h
index 2b6a965..98dd5c1 100644
--- a/src/lib/ecore_wl2/ecore_wl2_internal.h
+++ b/src/lib/ecore_wl2/ecore_wl2_internal.h
@@ -100,6 +100,473 @@ EAPI void ecore_wl2_window_buffer_attach(Ecore_Wl2_Window *win, void *buffer, in
100 */ 100 */
101EAPI void ecore_wl2_window_buffer_transform_set(Ecore_Wl2_Window *window, int transform); 101EAPI void ecore_wl2_window_buffer_transform_set(Ecore_Wl2_Window *window, int transform);
102 102
103/**
104 * Iconify a window
105 *
106 * @param win The window to iconifiy
107 * @param iconified The new iconified state to set
108 *
109 * @ingroup Ecore_Wl2_Window_Group
110 * @since 1.17
111 */
112EAPI void ecore_wl2_window_iconified_set(Ecore_Wl2_Window *window, Eina_Bool iconified);
113
114/**
115 * Check if a wayland window's surface is in the pending state.
116 *
117 * A surface is pending if it's been commit but we haven't received a
118 * frame callback for it yet. This mean's we're not ready to draw yet.
119 *
120 * @param window The window whose surface we want to check
121 *
122 * @return whether the window's surface is pending or not.
123 *
124 * @since 1.21
125 */
126EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
127
128/**
129 * @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions
130 * @ingroup Ecore_Wl2_Group
131 *
132 * Functions that deal with creating, destroying, or interacting with
133 * Wayland Drag-n-Drop
134 */
135
136/**
137 * Set the types which are supported by a possible drag and drop operation.
138 * This call initializes a data source and offeres the given mimetypes
139 *
140 * @param input the input where to add on the data source
141 * @param types a null-terminated array of mimetypes
142 *
143 * @ingroup Ecore_Wl2_Dnd_Group
144 * @since 1.17
145 */
146EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
147
148/**
149 * Start a drag on the given input
150 *
151 * @param input the input to use
152 * @param window the window which is the origin of the drag operation
153 * @param drag_window the window which is used as window of the visible hint.
154 *
155 * @return The serial for the start_drag request
156 *
157 * @ingroup Ecore_Wl2_Dnd_Group
158 * @since 1.17
159 */
160EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
161
162/**
163 * Call wl_data_source.set_actions on an existing source
164 *
165 * @param input the input to use
166 *
167 * @see ecore_wl2_dnd_drag_start for a more useful function.
168 *
169 * @ingroup Ecore_Wl2_Dnd_Group
170 * @since 1.20
171 */
172EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
173
174/**
175 * End a drag started by a call to ecore_wl2_dnd_drag_start
176 *
177 * @param input the input object on which the drag was started
178 *
179 * @ingroup Ecore_Wl2_Dnd_Group
180 * @since 1.17
181 */
182EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
183
184/**
185 * Get the offer which is currently resposible for the clipboard
186 *
187 * @param input the input object to use
188 *
189 * @ingroup Ecore_Wl2_Dnd_Group
190 * @since 1.19
191 */
192EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
193
194/**
195 * Set the types which are available from this client
196 * Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
197 * where the caller of this api must write the data (encoded in the given mimetype) to the fd
198 *
199 * @param input the input to provice this types on
200 * @param types a null-terminated array of mimetypes supported by the client
201 *
202 * @return serial of request on success, 0 on failure
203 *
204 * @ingroup Ecore_Wl2_Dnd_Group
205 * @since 1.17
206 */
207EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
208
209/**
210 * Clear the selection currently setted on this input.
211 *
212 * @param input the input to clear
213 *
214 * @return serial of request on success, 0 on failure
215 *
216 * @ingroup Ecore_Wl2_Dnd_Group
217 * @since 1.17
218 */
219EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
220
221/**
222 * Get the actions available from the data source
223 *
224 * @param offer Offer object to use
225 *
226 * @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
227 *
228 * @ingroup Ecore_Wl2_Dnd_Group
229 * @since 1.19
230 */
231EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
232
233/**
234 * Set the actions which are supported by you
235 *
236 * @param offer Offer object to use
237 * @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
238 * @param action the preferred action out of the actions
239 *
240 * @ingroup Ecore_Wl2_Dnd_Group
241 * @since 1.19
242 */
243EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
244
245/**
246 * Get action which is set by either the data source or in the last call of actions_set
247 *
248 * @param offer Offer object to use
249 *
250 * @return the preferred action
251 *
252 * @ingroup Ecore_Wl2_Dnd_Group
253 * @since 1.19
254 */
255EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
256
257/**
258 * Get the mime types which are given by the source
259 *
260 * @param offer the offer to query
261 *
262 * @return a eina array of strdup´ed strings, this array must NOT be changed or freed
263 *
264 * @ingroup Ecore_Wl2_Dnd_Group
265 * @since 1.19
266 */
267EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
268
269/**
270 * Set mimetypes you are accepting under this offer
271 *
272 * @param offer the offer to use
273 *
274 * @ingroup Ecore_Wl2_Dnd_Group
275 * @since 1.19
276 */
277EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
278
279/**
280 * Accept a single mime type for an offer
281 *
282 * @param offer the offer to use
283 * @param mime_type the mime type
284 *
285 * @ingroup Ecore_Wl2_Dnd_Group
286 * @since 1.20
287 */
288EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
289
290/**
291 * Request the data from this offer.
292 * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
293 * There offer will be not destroyed as long as requested data is not emitted by the event.
294 *
295 * @param offer the offer to use
296 * @param mime the mimetype to receive
297 *
298 * @ingroup Ecore_Wl2_Dnd_Group
299 * @since 1.19
300 */
301EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
302
303/**
304 * Request the data from this offer on an externally managed fd.
305 * The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
306 * There offer will be not destroyed as long as requested data is not emitted by the event.
307 *
308 * @param offer the offer to use
309 * @param mime the mimetype to receive
310 * @param fd the fd to pass for receiving
311 *
312 * @ingroup Ecore_Wl2_Dnd_Group
313 * @since 1.20
314 */
315EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
316
317/**
318 * End the use of a proxy received offer. This may invalidate the offer object
319 *
320 * @param offer the offer
321 *
322 * @ingroup Ecore_Wl2_Dnd_Group
323 * @since 1.20
324 */
325EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
326
327/**
328 * Check if the given offer supports the given mimetype
329 *
330 * @param offer the offer to use
331 * @param mime the mimetype to check
332 *
333 * @return Returns true if the mimetype is supported by this offer, false if not
334 *
335 * @ingroup Ecore_Wl2_Dnd_Group
336 * @since 1.19
337 */
338EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
339
340/**
341 * Mark this offer as finished
342 * This will call the dnd_finished event on the source of the sender.
343 *
344 * @param offer the offer to use
345 *
346 * @ingroup Ecore_Wl2_Dnd_Group
347 * @since 1.19
348 */
349EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer);
350
351/**
352 * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces.
353 * @ingroup Ecore_Wl2_Group
354 *
355 * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface.
356 *
357 * This API is intended to expose Wayland subsurface functionality, although it
358 * should not be necessary for most applications to use it, as soon as we have
359 * means to make Evas automatically switch Evas images to use subsurfaces.
360 *
361 * It can/should be used, for instance, when subsurfaces are needed to be not
362 * in sync with the main window surface.
363 */
364
365/**
366 * Create and return a new subsurface.
367 *
368 * Create a new surface (and subsurface interface), with the parent surface
369 * being the one associated with the given @param win.
370 *
371 * The @param win must be visible, otherwise there will be no surface created
372 * for it yet.
373 *
374 * @return the allocated and initialized Ecore_Wl2_Subsurface object, or
375 * NULL on failure
376 *
377 * @ingroup Ecore_Wl2_Subsurface_Group
378 * @since 1.17
379 */
380EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window);
381
382/**
383 * Destroy the given subsurface, as well as the surface associated with it.
384 *
385 * @param subsurface the subsurface
386 *
387 * @ingroup Ecore_Wl2_Subsurface_Group
388 * @since 1.17
389 */
390EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface);
391
392/**
393 * Get the wl_surface for this subsurface
394 *
395 * @param subsurface the subsurface
396 *
397 * @return the wl_surface associated with this subsurface, or NULL on failure
398 *
399 * @ingroup Ecore_Wl2_Subsurface_Group
400 * @since 1.17
401 */
402EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface);
403
404/**
405 * Set the position of this subsurface, relative to its parent surface.
406 * If subsurface is defined and the x, y coordinates differ from the currently
407 * tracked position, this also schedules a sub-surface position change.
408 *
409 * @param subsurface the subsurface
410 * @param x coordinate in the parent surface
411 * @param y coordinate in the parent surface
412 *
413 * @ingroup Ecore_Wl2_Subsurface_Group
414 * @since 1.17
415 */
416EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y);
417
418/**
419 * Get the position of this subsurface, relative to its parent surface.
420 * Coordinates will be returned in x and y if non-NULL.
421 *
422 * @param subsurface the subsurface
423 * @param x coordinate in the parent surface, or NULL to ignore
424 * @param y coordinate in the parent surface, or NULL to ignore
425 *
426 * @ingroup Ecore_Wl2_Subsurface_Group
427 * @since 1.17
428 */
429EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y);
430
431/**
432 * Place subsurface on layer above a reference surface
433 *
434 * Moves the @param subsurface to just above the reference @param
435 * surface, changing the z-order. The reference @param surface must
436 * be either a sibling or parent surface, else a protocol error will
437 * be generated.
438 *
439 * @param subsurface the subsurface
440 * @param surface the sibling reference surface
441 *
442 * @ingroup Ecore_Wl2_Subsurface_Group
443 * @since 1.17
444 */
445EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
446
447/**
448 * Place subsurface on layer below a reference surface
449 *
450 * See ecore_wl2_subsurface_place_above.
451 *
452 * @param subsurface the subsurface
453 * @param surface the sibling reference surface
454 *
455 * @ingroup Ecore_Wl2_Subsurface_Group
456 * @since 1.17
457 */
458EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface);
459
460/**
461 * Enables or disables sub-surface synchronization
462 *
463 * When synchronization is enabled, surface commits on the subsurface
464 * will be cached and only applied when the parent surface's state is
465 * applied. This ensures atomic updates of the parent and all of its
466 * synchronized sub-surfaces.
467 *
468 * When synchronization is disabled, commits will apply to the pending
469 * state directly without caching, just like a normal wl_surface. If
470 * there are already cached events when this is set, those events are
471 * applied simultaneously with the desync event.
472 *
473 * Attempting to enable synchronization when the subsurface already
474 * thinks it's sync'd, or desync when it believes its desync'd, will
475 * be trivially ignored and will not generate a Wayland event.
476 *
477 * See Wayland's set_desync documentation for further details and
478 * exceptional cases.
479 *
480 * @param subsurface the subsurface
481 * @param sync true to enable synchronization, false to desynchronize
482 *
483 * @ingroup Ecore_Wl2_Subsurface_Group
484 * @since 1.17
485 */
486EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync);
487
488/**
489 * Set an opaque region for the given subsurface.
490 *
491 * This is an optimization hint to the compositor to allow it avoid
492 * redrawing content unnecessarily. Note that marking transparent
493 * content as opaque will cause repaint artifacts.
494 *
495 * Use a 0x0 region size to unset the opaque region.
496 *
497 * @param subsurface the subsurface
498 * @param x coordinate in the parent surface
499 * @param y coordinate in the parent surface
500 * @param w width to set as opaque
501 * @param h height to set as opaque
502 *
503 * @ingroup Ecore_Wl2_Subsurface_Group
504 * @since 1.17
505 */
506EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h);
507
508/**
509 * Get list of supported auxiliary window hints
510 *
511 * @param window
512 *
513 * @return An Eina_List of supported auxiliary hints, or NULL otherwise
514 *
515 * @ingroup Ecore_Wl2_Window_Group
516 * @since 1.20
517 */
518EAPI Eina_List *ecore_wl2_window_aux_hints_supported_get(Ecore_Wl2_Window *window);
519
520/**
521 * Add a supported auxiliary hint to a given window
522 *
523 * @param window
524 * @param id
525 * @param hint
526 * @param val
527 *
528 * @ingroup Ecore_Wl2_Window_Group
529 * @since 1.20
530 */
531EAPI void ecore_wl2_window_aux_hint_add(Ecore_Wl2_Window *window, int id, const char *hint, const char *val);
532
533/**
534 * Change an auxiliary hint on a given window
535 *
536 * @param window
537 * @param id
538 * @param val
539 *
540 * @ingroup Ecore_Wl2_Window_Group
541 * @since 1.20
542 */
543EAPI void ecore_wl2_window_aux_hint_change(Ecore_Wl2_Window *window, int id, const char *val);
544
545/**
546 * Delete an auxiliary hint on a given window
547 *
548 * @param window
549 * @param id
550 *
551 * @ingroup Ecore_Wl2_Window_Group
552 * @since 1.20
553 */
554EAPI void ecore_wl2_window_aux_hint_del(Ecore_Wl2_Window *window, int id);
555
556/**
557 * Terminate a Wayland display's main loop
558 *
559 * @brief This function is typically used by servers to terminate the
560 * Wayland display main loop. This is usually only called when a server
561 * encounters an error.
562 *
563 * @param display The Ecore_Wl2_Display to terminate
564 *
565 * @ingroup Ecore_Wl2_Display_Group
566 * @since 1.17
567 */
568EAPI void ecore_wl2_display_terminate(Ecore_Wl2_Display *display);
569
103# undef EAPI 570# undef EAPI
104# define EAPI 571# define EAPI
105 572
diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h
index 5178e8f..0f8b7ff 100644
--- a/src/lib/ecore_wl2/ecore_wl2_private.h
+++ b/src/lib/ecore_wl2/ecore_wl2_private.h
@@ -508,6 +508,7 @@ struct _Ecore_Wl2_Input
508 double rate, delay; 508 double rate, delay;
509 Eina_Bool enabled : 1; 509 Eina_Bool enabled : 1;
510 Eina_Bool repeating : 1; 510 Eina_Bool repeating : 1;
511 Eina_Bool changed : 1;
511 } repeat; 512 } repeat;
512 513
513 struct 514 struct
diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c
index 0085354..f596a7a 100644
--- a/src/lib/ecore_wl2/ecore_wl2_window.c
+++ b/src/lib/ecore_wl2/ecore_wl2_window.c
@@ -845,6 +845,17 @@ ecore_wl2_window_opaque_region_set(Ecore_Wl2_Window *window, int x, int y, int w
845} 845}
846 846
847EAPI void 847EAPI void
848ecore_wl2_window_opaque_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h)
849{
850 EINA_SAFETY_ON_NULL_RETURN(window);
851
852 if (x) *x = window->opaque.x;
853 if (y) *y = window->opaque.y;
854 if (w) *w = window->opaque.w;
855 if (h) *h = window->opaque.h;
856}
857
858EAPI void
848ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h) 859ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w, int h)
849{ 860{
850 int nx = 0, ny = 0, nw = 0, nh = 0; 861 int nx = 0, ny = 0, nw = 0, nh = 0;
@@ -893,6 +904,17 @@ ecore_wl2_window_input_region_set(Ecore_Wl2_Window *window, int x, int y, int w,
893 window->pending.input = EINA_TRUE; 904 window->pending.input = EINA_TRUE;
894} 905}
895 906
907EAPI void
908ecore_wl2_window_input_region_get(Ecore_Wl2_Window *window, int *x, int *y, int *w, int *h)
909{
910 EINA_SAFETY_ON_NULL_RETURN(window);
911
912 if (x) *x = window->input_rect.x;
913 if (y) *y = window->input_rect.y;
914 if (w) *w = window->input_rect.w;
915 if (h) *h = window->input_rect.h;
916}
917
896EAPI Eina_Bool 918EAPI Eina_Bool
897ecore_wl2_window_maximized_get(Ecore_Wl2_Window *window) 919ecore_wl2_window_maximized_get(Ecore_Wl2_Window *window)
898{ 920{
@@ -1117,6 +1139,14 @@ ecore_wl2_window_popup_input_set(Ecore_Wl2_Window *window, Ecore_Wl2_Input *inpu
1117 window->grab = input; 1139 window->grab = input;
1118} 1140}
1119 1141
1142EAPI Ecore_Wl2_Input *
1143ecore_wl2_window_popup_input_get(Ecore_Wl2_Window *window)
1144{
1145 EINA_SAFETY_ON_NULL_RETURN_VAL(window, NULL);
1146
1147 return window->grab;
1148}
1149
1120EAPI Ecore_Wl2_Display * 1150EAPI Ecore_Wl2_Display *
1121ecore_wl2_window_display_get(const Ecore_Wl2_Window *window) 1151ecore_wl2_window_display_get(const Ecore_Wl2_Window *window)
1122{ 1152{
diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h
index 7d44230..bb5aedf 100644
--- a/src/lib/ecore_x/Ecore_X.h
+++ b/src/lib/ecore_x/Ecore_X.h
@@ -2432,6 +2432,7 @@ EAPI void ecore_x_region_window_shape_set(Ecore_X_Region region, E
2432EAPI void ecore_x_region_picture_clip_set(Ecore_X_Region region, Ecore_X_Picture picture, int x_origin, int y_origin); 2432EAPI void ecore_x_region_picture_clip_set(Ecore_X_Region region, Ecore_X_Picture picture, int x_origin, int y_origin);
2433EAPI void ecore_x_cursor_show(void); 2433EAPI void ecore_x_cursor_show(void);
2434EAPI void ecore_x_cursor_hide(void); 2434EAPI void ecore_x_cursor_hide(void);
2435EAPI void ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num); /** @since 1.24 */
2435 2436
2436/** 2437/**
2437 * xfixes selection notification request. 2438 * xfixes selection notification request.
@@ -2713,15 +2714,11 @@ struct _Ecore_X_Event_Gesture_Notify_Group
2713 int group_id; 2714 int group_id;
2714}; 2715};
2715 2716
2716EAPI Eina_Bool ecore_x_gesture_supported(void); 2717EINA_DEPRECATED EAPI Eina_Bool ecore_x_gesture_supported(void);
2717 2718EINA_DEPRECATED EAPI Eina_Bool ecore_x_gesture_events_select(Ecore_X_Window win, Ecore_X_Gesture_Event_Mask mask);
2718EAPI Eina_Bool ecore_x_gesture_events_select(Ecore_X_Window win, Ecore_X_Gesture_Event_Mask mask); 2719EINA_DEPRECATED EAPI Ecore_X_Gesture_Event_Mask ecore_x_gesture_events_selected_get(Ecore_X_Window win);
2719 2720EINA_DEPRECATED EAPI Eina_Bool ecore_x_gesture_event_grab(Ecore_X_Window win, Ecore_X_Gesture_Event_Type type, int num_fingers);
2720EAPI Ecore_X_Gesture_Event_Mask ecore_x_gesture_events_selected_get(Ecore_X_Window win); 2721EINA_DEPRECATED EAPI Eina_Bool ecore_x_gesture_event_ungrab(Ecore_X_Window win, Ecore_X_Gesture_Event_Type type, int num_fingers);
2721
2722EAPI Eina_Bool ecore_x_gesture_event_grab(Ecore_X_Window win, Ecore_X_Gesture_Event_Type type, int num_fingers);
2723
2724EAPI Eina_Bool ecore_x_gesture_event_ungrab(Ecore_X_Window win, Ecore_X_Gesture_Event_Type type, int num_fingers);
2725 2722
2726EAPI void ecore_x_e_illume_indicator_state_set(Ecore_X_Window win, Ecore_X_Illume_Indicator_State state); 2723EAPI void ecore_x_e_illume_indicator_state_set(Ecore_X_Window win, Ecore_X_Illume_Indicator_State state);
2727EAPI Ecore_X_Illume_Indicator_State ecore_x_e_illume_indicator_state_get(Ecore_X_Window win); 2724EAPI Ecore_X_Illume_Indicator_State ecore_x_e_illume_indicator_state_get(Ecore_X_Window win);
diff --git a/src/lib/ecore_x/ecore_x.c b/src/lib/ecore_x/ecore_x.c
index cbe2d13..ff603bb 100644
--- a/src/lib/ecore_x/ecore_x.c
+++ b/src/lib/ecore_x/ecore_x.c
@@ -61,9 +61,6 @@ static int _ecore_x_event_fixes_selection_id = 0;
61#ifdef ECORE_XDAMAGE 61#ifdef ECORE_XDAMAGE
62static int _ecore_x_event_damage_id = 0; 62static int _ecore_x_event_damage_id = 0;
63#endif /* ifdef ECORE_XDAMAGE */ 63#endif /* ifdef ECORE_XDAMAGE */
64#ifdef ECORE_XGESTURE
65static int _ecore_x_event_gesture_id = 0;
66#endif /* ifdef ECORE_XGESTURE */
67#ifdef ECORE_XKB 64#ifdef ECORE_XKB
68static int _ecore_x_event_xkb_id = 0; 65static int _ecore_x_event_xkb_id = 0;
69#endif /* ifdef ECORE_XKB */ 66#endif /* ifdef ECORE_XKB */
@@ -408,10 +405,6 @@ _ecore_x_init2(void)
408 int damage_base = 0; 405 int damage_base = 0;
409 int damage_err_base = 0; 406 int damage_err_base = 0;
410#endif /* ifdef ECORE_XDAMAGE */ 407#endif /* ifdef ECORE_XDAMAGE */
411#ifdef ECORE_XGESTURE
412 int gesture_base = 0;
413 int gesture_err_base = 0;
414#endif /* ifdef ECORE_XGESTURE */
415#ifdef ECORE_XKB 408#ifdef ECORE_XKB
416 int xkb_base = 0; 409 int xkb_base = 0;
417#endif /* ifdef ECORE_XKB */ 410#endif /* ifdef ECORE_XKB */
@@ -470,12 +463,6 @@ _ecore_x_init2(void)
470 ECORE_X_EVENT_HANDLERS_GROW(damage_base, XDamageNumberEvents); 463 ECORE_X_EVENT_HANDLERS_GROW(damage_base, XDamageNumberEvents);
471#endif /* ifdef ECORE_XDAMAGE */ 464#endif /* ifdef ECORE_XDAMAGE */
472 465
473#ifdef ECORE_XGESTURE
474 if (XGestureQueryExtension(_ecore_x_disp, &gesture_base, &gesture_err_base))
475 _ecore_x_event_gesture_id = gesture_base;
476
477 ECORE_X_EVENT_HANDLERS_GROW(gesture_base, GestureNumberEvents);
478#endif /* ifdef ECORE_XGESTURE */
479#ifdef ECORE_XKB 466#ifdef ECORE_XKB
480 { 467 {
481 int dummy; 468 int dummy;
@@ -577,20 +564,6 @@ _ecore_x_init2(void)
577 _ecore_x_event_handlers[_ecore_x_event_xkb_id] = _ecore_x_event_handle_xkb; 564 _ecore_x_event_handlers[_ecore_x_event_xkb_id] = _ecore_x_event_handle_xkb;
578#endif /* ifdef ECORE_XKB */ 565#endif /* ifdef ECORE_XKB */
579 566
580#ifdef ECORE_XGESTURE
581 if (_ecore_x_event_gesture_id)
582 {
583 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyFlick] = _ecore_x_event_handle_gesture_notify_flick;
584 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyPan] = _ecore_x_event_handle_gesture_notify_pan;
585 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyPinchRotation] = _ecore_x_event_handle_gesture_notify_pinchrotation;
586 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyTap] = _ecore_x_event_handle_gesture_notify_tap;
587 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyTapNHold] = _ecore_x_event_handle_gesture_notify_tapnhold;
588 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyHold] = _ecore_x_event_handle_gesture_notify_hold;
589 _ecore_x_event_handlers[_ecore_x_event_gesture_id + GestureNotifyGroup] = _ecore_x_event_handle_gesture_notify_group;
590 }
591
592#endif /* ifdef ECORE_XGESTURE */
593
594 ECORE_X_EVENT_ANY = ecore_event_type_new(); 567 ECORE_X_EVENT_ANY = ecore_event_type_new();
595 ECORE_X_EVENT_MOUSE_IN = ecore_event_type_new(); 568 ECORE_X_EVENT_MOUSE_IN = ecore_event_type_new();
596 ECORE_X_EVENT_MOUSE_OUT = ecore_event_type_new(); 569 ECORE_X_EVENT_MOUSE_OUT = ecore_event_type_new();
@@ -691,7 +664,6 @@ _ecore_x_init2(void)
691 _ecore_x_present_init(); 664 _ecore_x_present_init();
692 _ecore_x_dpms_init(); 665 _ecore_x_dpms_init();
693 _ecore_x_randr_init(); 666 _ecore_x_randr_init();
694 _ecore_x_gesture_init();
695 _ecore_x_input_init(); 667 _ecore_x_input_init();
696 _ecore_x_events_init(); 668 _ecore_x_events_init();
697 669
diff --git a/src/lib/ecore_x/ecore_x_events.c b/src/lib/ecore_x/ecore_x_events.c
index 904e115..6431bdd 100644
--- a/src/lib/ecore_x/ecore_x_events.c
+++ b/src/lib/ecore_x/ecore_x_events.c
@@ -2466,188 +2466,6 @@ _ecore_x_event_handle_generic_event(XEvent *event)
2466 data); 2466 data);
2467} 2467}
2468 2468
2469#ifdef ECORE_XGESTURE
2470void
2471_ecore_x_event_handle_gesture_notify_flick(XEvent *xevent)
2472{
2473 XGestureNotifyFlickEvent *xfe;
2474 Ecore_X_Event_Gesture_Notify_Flick *e;
2475
2476 _ecore_x_last_event_mouse_move = EINA_FALSE;
2477 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2478
2479 xfe = (XGestureNotifyFlickEvent *)xevent;
2480 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Flick));
2481 if (!e)
2482 return;
2483
2484 e->win = xfe->window;
2485 e->time = xfe->time;
2486 e->subtype = xfe->kind;
2487 e->num_fingers = xfe->num_finger;
2488 e->distance = xfe->distance;
2489 e->duration = xfe->duration;
2490 e->direction = xfe->direction;
2491 e->angle = XFixedToDouble(xfe->angle);
2492
2493 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_FLICK, e, NULL, NULL);
2494}
2495
2496void
2497_ecore_x_event_handle_gesture_notify_pan(XEvent *xevent)
2498{
2499 XGestureNotifyPanEvent *xpe;
2500 Ecore_X_Event_Gesture_Notify_Pan *e;
2501
2502 _ecore_x_last_event_mouse_move = EINA_FALSE;
2503 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2504
2505 xpe = (XGestureNotifyPanEvent *)xevent;
2506 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Pan));
2507 if (!e)
2508 return;
2509
2510 e->win = xpe->window;
2511 e->time = xpe->time;
2512 e->subtype = xpe->kind;
2513 e->num_fingers = xpe->num_finger;
2514 e->dx = xpe->dx;
2515 e->dy = xpe->dy;
2516 e->distance = xpe->distance;
2517 e->duration = xpe->duration;
2518 e->direction = xpe->direction;
2519
2520 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PAN, e, NULL, NULL);
2521}
2522
2523void
2524_ecore_x_event_handle_gesture_notify_pinchrotation(XEvent *xevent)
2525{
2526 XGestureNotifyPinchRotationEvent *xpre;
2527 Ecore_X_Event_Gesture_Notify_PinchRotation *e;
2528
2529 _ecore_x_last_event_mouse_move = EINA_FALSE;
2530 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2531
2532 xpre = (XGestureNotifyPinchRotationEvent *)xevent;
2533 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_PinchRotation));
2534 if (!e)
2535 return;
2536
2537 e->win = xpre->window;
2538 e->time = xpre->time;
2539 e->subtype = xpre->kind;
2540 e->num_fingers = xpre->num_finger;
2541 e->distance = xpre->distance;
2542 e->cx = xpre->cx;
2543 e->cy = xpre->cy;
2544 e->zoom = XFixedToDouble(xpre->zoom);
2545 e->angle = XFixedToDouble(xpre->angle);
2546
2547 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_PINCHROTATION, e, NULL, NULL);
2548}
2549
2550void
2551_ecore_x_event_handle_gesture_notify_tap(XEvent *xevent)
2552{
2553 XGestureNotifyTapEvent *xte;
2554 Ecore_X_Event_Gesture_Notify_Tap *e;
2555
2556 _ecore_x_last_event_mouse_move = EINA_FALSE;
2557 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2558
2559 xte = (XGestureNotifyTapEvent *)xevent;
2560 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Tap));
2561 if (!e)
2562 return;
2563
2564 e->win = xte->window;
2565 e->time = xte->time;
2566 e->subtype = xte->kind;
2567 e->num_fingers = xte->num_finger;
2568 e->cx = xte->cx;
2569 e->cy = xte->cy;
2570 e->tap_repeat = xte->tap_repeat;
2571 e->interval = xte->interval;
2572
2573 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAP, e, NULL, NULL);
2574}
2575
2576void
2577_ecore_x_event_handle_gesture_notify_tapnhold(XEvent *xevent)
2578{
2579 XGestureNotifyTapNHoldEvent *xthe;
2580 Ecore_X_Event_Gesture_Notify_TapNHold *e;
2581
2582 _ecore_x_last_event_mouse_move = EINA_FALSE;
2583 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2584
2585 xthe = (XGestureNotifyTapNHoldEvent *)xevent;
2586 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_TapNHold));
2587 if (!e)
2588 return;
2589
2590 e->win = xthe->window;
2591 e->time = xthe->time;
2592 e->subtype = xthe->kind;
2593 e->num_fingers = xthe->num_finger;
2594 e->cx = xthe->cx;
2595 e->cy = xthe->cy;
2596 e->interval = xthe->interval;
2597 e->hold_time = xthe->holdtime;
2598
2599 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD, e, NULL, NULL);
2600}
2601
2602void
2603_ecore_x_event_handle_gesture_notify_hold(XEvent *xevent)
2604{
2605 XGestureNotifyHoldEvent *xhe;
2606 Ecore_X_Event_Gesture_Notify_Hold *e;
2607
2608 _ecore_x_last_event_mouse_move = EINA_FALSE;
2609 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2610
2611 xhe = (XGestureNotifyHoldEvent *)xevent;
2612 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Hold));
2613 if (!e)
2614 return;
2615
2616 e->win = xhe->window;
2617 e->time = xhe->time;
2618 e->subtype = xhe->kind;
2619 e->num_fingers = xhe->num_finger;
2620 e->cx = xhe->cx;
2621 e->cy = xhe->cy;
2622 e->hold_time = xhe->holdtime;
2623
2624 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_HOLD, e, NULL, NULL);
2625}
2626
2627void
2628_ecore_x_event_handle_gesture_notify_group(XEvent *xevent)
2629{
2630 XGestureNotifyGroupEvent *xge;
2631 Ecore_X_Event_Gesture_Notify_Group *e;
2632
2633 _ecore_x_last_event_mouse_move = EINA_FALSE;
2634 LOGFN(__FILE__, __LINE__, __FUNCTION__);
2635
2636 xge = (XGestureNotifyGroupEvent *)xevent;
2637 e = calloc(1, sizeof(Ecore_X_Event_Gesture_Notify_Group));
2638 if (!e)
2639 return;
2640
2641 e->win = xge->window;
2642 e->time = xge->time;
2643 e->subtype = xge->kind;
2644 e->num_groups = xge->num_group;
2645 e->group_id = xge->groupid;
2646
2647 ecore_event_add(ECORE_X_EVENT_GESTURE_NOTIFY_GROUP, e, NULL, NULL);
2648}
2649
2650#endif /* ifdef ECORE_XGESTURE */
2651#ifdef ECORE_XKB 2469#ifdef ECORE_XKB
2652 2470
2653void 2471void
diff --git a/src/lib/ecore_x/ecore_x_fixes.c b/src/lib/ecore_x/ecore_x_fixes.c
index dd81b67..5582c3e 100644
--- a/src/lib/ecore_x/ecore_x_fixes.c
+++ b/src/lib/ecore_x/ecore_x_fixes.c
@@ -7,6 +7,8 @@
7#include "ecore_x_private.h" 7#include "ecore_x_private.h"
8#include "Ecore_X.h" 8#include "Ecore_X.h"
9 9
10#include <X11/Xregion.h>
11
10static int _fixes_available; 12static int _fixes_available;
11#ifdef ECORE_XFIXES 13#ifdef ECORE_XFIXES
12static int _fixes_major, _fixes_minor; 14static int _fixes_major, _fixes_minor;
@@ -434,3 +436,100 @@ ecore_x_cursor_hide(void)
434 } 436 }
435#endif /* ifdef ECORE_XFIXES */ 437#endif /* ifdef ECORE_XFIXES */
436} 438}
439
440EAPI void
441ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
442{
443#ifdef ECORE_XFIXES
444 static PointerBarrier *bar = NULL;
445 static int bar_num = 0;
446 static int bar_alloc = 0;
447 Region reg, reg2, reg3;
448 int i, j;
449
450 // clear out old root screen barriers....
451 if (bar)
452 {
453 for (i = 0; i < bar_num; i++)
454 {
455 XFixesDestroyPointerBarrier(_ecore_x_disp, bar[i]);
456 }
457 free(bar);
458 }
459 bar = NULL;
460 bar_num = 0;
461 bar_alloc = 0;
462 if ((!screens) || (num <= 0)) return;
463
464 // set up new ones given the screen list given
465 for (i = 0; i < num; i++)
466 {
467 XRectangle xrect;
468
469 reg = XCreateRegion();
470 reg2 = XCreateRegion();
471 xrect.x = screens[i].x - 1;
472 xrect.y = screens[i].y - 1;
473 xrect.width = screens[i].width + 2;
474 xrect.height = screens[i].height + 2;
475 XUnionRectWithRegion(&xrect, reg, reg2);
476 XDestroyRegion(reg);
477 reg = reg2;
478
479 // reg == screen i + 1 pixel surrounding it
480 for (j = 0; j < num; j++)
481 {
482 // create a region representing screen j
483 reg2 = XCreateRegion();
484 reg3 = XCreateRegion();
485 xrect.x = screens[j].x;
486 xrect.y = screens[j].y;
487 xrect.width = screens[j].width;
488 xrect.height = screens[j].height;
489 XUnionRectWithRegion(&xrect, reg2, reg3);
490 XDestroyRegion(reg2);
491 reg2 = reg3;
492 // reg2 == screen j
493
494 reg3 = XCreateRegion();
495 XSubtractRegion(reg, reg2, reg3);
496 XDestroyRegion(reg);
497 XDestroyRegion(reg2);
498 reg = reg3;
499 // reg now has had screen j cut out of the boundary
500 }
501 // reg is the result of starting with screen i and then with a
502 // 1 pixel boundary around it havnig adjacent screens "cut out"
503 // of that boundary leaving only extra bounds where no screens
504 // are adjacent
505
506 // walk rects and create barriers
507 for (j = 0; j < reg->numRects; j++)
508 {
509 int x1, y1, x2, y2;
510
511 bar_num++;
512 if (bar_num > bar_alloc)
513 {
514 bar_alloc += 32;
515 PointerBarrier *t = realloc(bar, bar_alloc * sizeof(PointerBarrier));
516 if (!t)
517 {
518 bar_num--;
519 return;
520 }
521 bar = t;
522 }
523 x1 = reg->rects[j].x1;
524 y1 = reg->rects[j].y1;
525 x2 = reg->rects[j].x2 - 1;
526 y2 = reg->rects[j].y2 - 1;
527 bar[bar_num - 1] =
528 XFixesCreatePointerBarrier(_ecore_x_disp,
529 DefaultRootWindow(_ecore_x_disp),
530 x1, y1, x2, y2, 0, 0, NULL);
531 }
532 XDestroyRegion(reg);
533 }
534#endif
535}
diff --git a/src/lib/ecore_x/ecore_x_gesture.c b/src/lib/ecore_x/ecore_x_gesture.c
index 15a9efd..643d728 100644
--- a/src/lib/ecore_x/ecore_x_gesture.c
+++ b/src/lib/ecore_x/ecore_x_gesture.c
@@ -4,128 +4,44 @@
4 4
5#include "ecore_x_private.h" 5#include "ecore_x_private.h"
6 6
7static Eina_Bool _gesture_available = EINA_FALSE;
8
9#ifdef ECORE_XGESTURE
10static int _gesture_major, _gesture_minor, _gesture_patch;
11int _gesture_version;
12#endif /* ifdef ECORE_XGESTURE */
13
14void
15_ecore_x_gesture_init(void)
16{
17#ifdef ECORE_XGESTURE
18 _gesture_major = 0;
19 _gesture_minor = 0;
20 _gesture_patch = 0;
21 _gesture_version = 0;
22
23 if (XGestureQueryVersion(_ecore_x_disp, &_gesture_major, &_gesture_minor, &_gesture_patch))
24 {
25 _gesture_version = (_gesture_major << 16) | _gesture_minor;
26 _gesture_available = EINA_TRUE;
27 }
28 else
29 _gesture_available = EINA_FALSE;
30#else /* ifdef ECORE_XGESTURE */
31 _gesture_available = EINA_FALSE;
32#endif /* ifdef ECORE_XGESTURE */
33}
34
35/* 7/*
36 * @brief Query whether gesture is available or not. 8 * @brief Query whether gesture is available or not.
37 * 9 *
38 * @return @c EINA_TRUE, if extension is available, @c EINA_FALSE otherwise. 10 * @return @c EINA_TRUE, if extension is available, @c EINA_FALSE otherwise.
11 *
12 * @deprecated
39 */ 13 */
40EAPI Eina_Bool 14EAPI Eina_Bool
41ecore_x_gesture_supported(void) 15ecore_x_gesture_supported(void)
42{ 16{
43 return _gesture_available; 17 return EINA_FALSE;
44} 18}
45 19
46EAPI Eina_Bool 20EAPI Eina_Bool
47ecore_x_gesture_events_select(Ecore_X_Window win, 21ecore_x_gesture_events_select(Ecore_X_Window win EINA_UNUSED,
48 Ecore_X_Gesture_Event_Mask mask) 22 Ecore_X_Gesture_Event_Mask mask EINA_UNUSED)
49{ 23{
50#ifdef ECORE_XGESTURE
51 if (!_gesture_available)
52 return EINA_FALSE;
53
54 LOGFN(__FILE__, __LINE__, __FUNCTION__);
55 XGestureSelectEvents(_ecore_x_disp, win, mask);
56 if (_ecore_xlib_sync) ecore_x_sync();
57
58 return EINA_TRUE;
59#else /* ifdef ECORE_XGESTURE */
60 (void) win;
61 (void) mask;
62 return EINA_FALSE; 24 return EINA_FALSE;
63#endif /* ifdef ECORE_XGESTURE */
64} 25}
65 26
66EAPI Ecore_X_Gesture_Event_Mask 27EAPI Ecore_X_Gesture_Event_Mask
67ecore_x_gesture_events_selected_get(Ecore_X_Window win) 28ecore_x_gesture_events_selected_get(Ecore_X_Window win EINA_UNUSED)
68{ 29{
69#ifdef ECORE_XGESTURE
70 Ecore_X_Gesture_Event_Mask mask;
71
72 if (!_gesture_available)
73 return ECORE_X_GESTURE_EVENT_MASK_NONE;
74
75 LOGFN(__FILE__, __LINE__, __FUNCTION__);
76 if (GestureSuccess != XGestureGetSelectedEvents(_ecore_x_disp, win, (Mask *)&mask))
77 mask = ECORE_X_GESTURE_EVENT_MASK_NONE;
78 if (_ecore_xlib_sync) ecore_x_sync();
79
80 return mask;
81#else /* ifdef ECORE_XGESTURE */
82 (void) win;
83 return ECORE_X_GESTURE_EVENT_MASK_NONE; 30 return ECORE_X_GESTURE_EVENT_MASK_NONE;
84#endif /* ifdef ECORE_XGESTURE */
85} 31}
86 32
87EAPI Eina_Bool 33EAPI Eina_Bool
88ecore_x_gesture_event_grab(Ecore_X_Window win, 34ecore_x_gesture_event_grab(Ecore_X_Window win EINA_UNUSED,
89 Ecore_X_Gesture_Event_Type type, 35 Ecore_X_Gesture_Event_Type type EINA_UNUSED,
90 int num_fingers) 36 int num_fingers EINA_UNUSED)
91{ 37{
92#ifdef ECORE_XGESTURE
93 Eina_Bool ret;
94 if (!_gesture_available)
95 return EINA_FALSE;
96
97 LOGFN(__FILE__, __LINE__, __FUNCTION__);
98 ret = (GestureGrabSuccess == XGestureGrabEvent(_ecore_x_disp, win, type, num_fingers, CurrentTime));
99 if (_ecore_xlib_sync) ecore_x_sync();
100 return ret;
101#else /* ifdef ECORE_XGESTURE */
102 (void) win;
103 (void) type;
104 (void) num_fingers;
105 return EINA_FALSE; 38 return EINA_FALSE;
106#endif /* ifdef ECORE_XGESTURE */
107} 39}
108 40
109EAPI Eina_Bool 41EAPI Eina_Bool
110ecore_x_gesture_event_ungrab(Ecore_X_Window win, 42ecore_x_gesture_event_ungrab(Ecore_X_Window win EINA_UNUSED,
111 Ecore_X_Gesture_Event_Type type, 43 Ecore_X_Gesture_Event_Type type EINA_UNUSED,
112 int num_fingers) 44 int num_fingers EINA_UNUSED)
113{ 45{
114#ifdef ECORE_XGESTURE
115 Eina_Bool ret;
116
117 if (!_gesture_available)
118 return EINA_FALSE;
119
120 LOGFN(__FILE__, __LINE__, __FUNCTION__);
121 ret = (GestureUngrabSuccess == XGestureUngrabEvent(_ecore_x_disp, win, type, num_fingers, CurrentTime));
122 if (_ecore_xlib_sync) ecore_x_sync();
123 return ret;
124#else /* ifdef ECORE_XGESTURE */
125 (void) win;
126 (void) type;
127 (void) num_fingers;
128 return EINA_FALSE; 46 return EINA_FALSE;
129#endif /* ifdef ECORE_XGESTURE */
130} 47}
131
diff --git a/src/lib/ecore_x/ecore_x_private.h b/src/lib/ecore_x/ecore_x_private.h
index ce81efe..5a288d4 100644
--- a/src/lib/ecore_x/ecore_x_private.h
+++ b/src/lib/ecore_x/ecore_x_private.h
@@ -44,10 +44,6 @@
44#ifdef ECORE_XDAMAGE 44#ifdef ECORE_XDAMAGE
45#include <X11/extensions/Xdamage.h> 45#include <X11/extensions/Xdamage.h>
46#endif /* ifdef ECORE_XDAMAGE */ 46#endif /* ifdef ECORE_XDAMAGE */
47#ifdef ECORE_XGESTURE
48#include <X11/extensions/gesture.h>
49#include <X11/extensions/gestureproto.h>
50#endif /* ifdef ECORE_XGESTURE */
51#ifdef ECORE_XDPMS 47#ifdef ECORE_XDPMS
52#include <X11/extensions/dpms.h> 48#include <X11/extensions/dpms.h>
53#endif /* ifdef ECORE_XDPMS */ 49#endif /* ifdef ECORE_XDPMS */
@@ -248,15 +244,6 @@ void _ecore_x_event_handle_client_message(XEvent *xevent);
248void _ecore_x_event_handle_mapping_notify(XEvent *xevent); 244void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
249void _ecore_x_event_handle_shape_change(XEvent *xevent); 245void _ecore_x_event_handle_shape_change(XEvent *xevent);
250void _ecore_x_event_handle_screensaver_notify(XEvent *xevent); 246void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
251#ifdef ECORE_XGESTURE
252void _ecore_x_event_handle_gesture_notify_flick(XEvent *xevent);
253void _ecore_x_event_handle_gesture_notify_pan(XEvent *xevent);
254void _ecore_x_event_handle_gesture_notify_pinchrotation(XEvent *xevent);
255void _ecore_x_event_handle_gesture_notify_tap(XEvent *xevent);
256void _ecore_x_event_handle_gesture_notify_tapnhold(XEvent *xevent);
257void _ecore_x_event_handle_gesture_notify_hold(XEvent *xevent);
258void _ecore_x_event_handle_gesture_notify_group(XEvent *xevent);
259#endif /* ifdef ECORE_XGESTURE */
260void _ecore_x_event_handle_sync_counter(XEvent *xevent); 247void _ecore_x_event_handle_sync_counter(XEvent *xevent);
261void _ecore_x_event_handle_sync_alarm(XEvent *xevent); 248void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
262#ifdef ECORE_XRANDR 249#ifdef ECORE_XRANDR
diff --git a/src/lib/ecore_x/ecore_x_vsync.c b/src/lib/ecore_x/ecore_x_vsync.c
index 05e18ed..e002e48 100644
--- a/src/lib/ecore_x/ecore_x_vsync.c
+++ b/src/lib/ecore_x/ecore_x_vsync.c
@@ -300,7 +300,7 @@ _drm_tick_core(void *data EINA_UNUSED, Ecore_Thread *thread)
300 if (!drm_event_is_busy) 300 if (!drm_event_is_busy)
301 { 301 {
302 DBG("wait..."); 302 DBG("wait...");
303 D(" @1.5f wait...\n", ecore_time_get()); 303 D(" @%1.5f wait...\n", ecore_time_get());
304 msg = eina_thread_queue_wait(thq, &ref); 304 msg = eina_thread_queue_wait(thq, &ref);
305 if (msg) 305 if (msg)
306 { 306 {
diff --git a/src/lib/ecore_x/ecore_x_xi2.c b/src/lib/ecore_x/ecore_x_xi2.c
index 6bbbd85..c1b131e 100644
--- a/src/lib/ecore_x/ecore_x_xi2.c
+++ b/src/lib/ecore_x/ecore_x_xi2.c
@@ -1035,9 +1035,10 @@ ecore_x_input_device_property_get(int slot, const char *prop, int *num_ret,
1035 1035
1036 if ((slot < 0) || (slot >= _ecore_x_xi2_num)) goto err; 1036 if ((slot < 0) || (slot >= _ecore_x_xi2_num)) goto err;
1037 a = XInternAtom(_ecore_x_disp, prop, False); 1037 a = XInternAtom(_ecore_x_disp, prop, False);
1038 if (!XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid, 1038 // XIGetProperty returns 0 AKA `Success` if everything is good
1039 if (XIGetProperty(_ecore_x_disp, _ecore_x_xi2_devs[slot].deviceid,
1039 a, 0, 65536, False, AnyPropertyType, &a_type, &fmt, 1040 a, 0, 65536, False, AnyPropertyType, &a_type, &fmt,
1040 &num, &dummy, &data)) goto err; 1041 &num, &dummy, &data) != 0) goto err;
1041 *format_ret = a_type; 1042 *format_ret = a_type;
1042 *num_ret = num; 1043 *num_ret = num;
1043 *unit_size_ret = fmt; 1044 *unit_size_ret = fmt;
diff --git a/src/lib/ecore_x/meson.build b/src/lib/ecore_x/meson.build
index 0e16bd7..ba7d01f 100644
--- a/src/lib/ecore_x/meson.build
+++ b/src/lib/ecore_x/meson.build
@@ -61,10 +61,6 @@ if get_option('xpresent')
61 ecore_x_checks += [['Xpresent', 'Xpresent.h', 'Xpresent', 'XPresentQueryExtension']] 61 ecore_x_checks += [['Xpresent', 'Xpresent.h', 'Xpresent', 'XPresentQueryExtension']]
62endif 62endif
63 63
64if get_option('xgesture')
65 ecore_x_checks += [['Xgesture', 'gesture.h', 'Xgesture', 'XGestureQueryExtension']]
66endif
67
68if get_option('xinput2') 64if get_option('xinput2')
69 ecore_x_checks += [['Xi2', 'XInput2.h', 'Xi', 'XIQueryDevice']] 65 ecore_x_checks += [['Xi2', 'XInput2.h', 'Xi', 'XIQueryDevice']]
70endif 66endif
@@ -75,7 +71,7 @@ endif
75 71
76x11 = dependency('x11', required: false) 72x11 = dependency('x11', required: false)
77if x11.found() == false 73if x11.found() == false
78 x11 = cc.find_library('x11', required: true) 74 x11 = cc.find_library('X11', required: true)
79endif 75endif
80 76
81xcb = dependency('xcb', required: false) 77xcb = dependency('xcb', required: false)
@@ -85,7 +81,7 @@ endif
85 81
86x11_xcb = dependency('x11-xcb', required: false) 82x11_xcb = dependency('x11-xcb', required: false)
87if x11_xcb.found() == false 83if x11_xcb.found() == false
88 x11_xcb = cc.find_library('x11-xcb', required: true) 84 x11_xcb = cc.find_library('X11-xcb', required: true)
89endif 85endif
90 86
91foreach ecore_x_check : ecore_x_checks 87foreach ecore_x_check : ecore_x_checks
diff --git a/src/lib/ector/software/ector_renderer_software_gradient_linear.c b/src/lib/ector/software/ector_renderer_software_gradient_linear.c
index 999feed..0e5bc93 100644
--- a/src/lib/ector/software/ector_renderer_software_gradient_linear.c
+++ b/src/lib/ector/software/ector_renderer_software_gradient_linear.c
@@ -8,19 +8,19 @@
8 8
9#include "ector_private.h" 9#include "ector_private.h"
10#include "ector_software_private.h" 10#include "ector_software_private.h"
11#include "ector_software_gradient.h"
11 12
12static Eina_Bool 13static Eina_Bool
13_ector_renderer_software_gradient_linear_ector_renderer_prepare(Eo *obj, 14_ector_renderer_software_gradient_linear_ector_renderer_prepare(Eo *obj,
14 Ector_Renderer_Software_Gradient_Data *pd) 15 Ector_Renderer_Software_Gradient_Data *pd)
15{ 16{
17 pd->ctable_status = CTABLE_NOT_READY;
18
16 if (!pd->surface) 19 if (!pd->surface)
17 { 20 {
18 Ector_Renderer_Data *base; 21 Ector_Renderer_Data *base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
19
20 base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
21 pd->surface = efl_data_xref(base->surface, ECTOR_SOFTWARE_SURFACE_CLASS, obj);