bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=44a45e3acadb61235e5230d2ff38b967b99e7a39

commit 44a45e3acadb61235e5230d2ff38b967b99e7a39
Author: Marcel Hollerbach <m...@marcel-hollerbach.de>
Date:   Sun Jul 28 17:11:40 2019 +0200

    efl_ui_item: migrate to Efl.Ui.Clickable
    
    this adds the mixin to the item. With this commit every class inheriting
    from Efl.Ui.Item will automatically emit all the clickable events.
    
    Reviewed-by: Mike Blumenkrantz <michael.blumenkra...@gmail.com>
    Reviewed-by: Xavi Artigas <xavierarti...@yahoo.es>
    Differential Revision: https://phab.enlightenment.org/D8830
---
 src/lib/elementary/efl_ui_item.c               | 135 ++++---------------------
 src/lib/elementary/efl_ui_item_private.h       |   2 -
 src/tests/elementary/spec/efl_test_clickable.c |  15 ++-
 src/tests/elementary/spec/efl_ui_spec_suite.c  |   2 +
 4 files changed, 35 insertions(+), 119 deletions(-)

diff --git a/src/lib/elementary/efl_ui_item.c b/src/lib/elementary/efl_ui_item.c
index 7b9beab362..26911a3a73 100644
--- a/src/lib/elementary/efl_ui_item.c
+++ b/src/lib/elementary/efl_ui_item.c
@@ -167,134 +167,39 @@ _item_unselect(Eo *obj, Efl_Ui_Item_Data *pd)
 }
 
 /* Mouse Controls */
-static Eina_Bool
-_item_longpressed(void *data)
-{
-   Efl_Ui_Item *item = data;
-   EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd, ECORE_CALLBACK_CANCEL);
-
-   pd->longpress_timer = NULL;
-
-   efl_event_callback_call(item, EFL_INPUT_EVENT_LONGPRESSED, NULL);
-   return ECORE_CALLBACK_CANCEL;
-}
-
 static void
-_item_mouse_down(void *data,
-                 Evas *evas EINA_UNUSED,
-                 Evas_Object *obj EINA_UNUSED,
-                 void *event_info)
+_item_pressed(void *data, const Efl_Event *ev EINA_UNUSED)
 {
-   Evas_Event_Mouse_Down *ev = event_info;
-   Eo *item = data;
-   EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd);
-   ELM_WIDGET_DATA_GET_OR_RETURN(item, wd);
-   if (wd->disabled) return;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-
-   edje_object_signal_emit(wd->resize_obj, "efl,state,pressed", "efl");
+   Efl_Ui_Item *obj = data;
+   if (efl_ui_widget_disabled_get(obj)) return;
 
-   pd->longpress_timer = ecore_timer_add(_elm_config->longpress_timeout, 
_item_longpressed, item);
-   efl_event_callback_call(item, EFL_INPUT_EVENT_PRESSED, NULL);
+   efl_layout_signal_emit(obj, "efl,state,pressed", "efl");
 }
 
 static void
-_item_mouse_up(void *data,
-               Evas *evas EINA_UNUSED,
-               Evas_Object *obj EINA_UNUSED,
-               void *event_info)
+_item_unpressed(void *data, const Efl_Event *ev EINA_UNUSED)
 {
-   Evas_Event_Mouse_Up *ev = event_info;
-   Eo *item = data;
+   Efl_Ui_Item *obj = data;
    Efl_Ui_Select_Mode m;
+   EFL_UI_ITEM_DATA_GET_OR_RETURN(obj, pd);
 
-   if (!efl_ui_item_container_get(item))
-     return;
-   EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd);
-   ELM_WIDGET_DATA_GET_OR_RETURN(item, wd);
-   if (wd->disabled) return;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
-     {
-        //FIXME: should we send this message to fallback?
-        edje_object_signal_emit(wd->resize_obj, "efl,state,unpressed", "efl");
-        //efl_event_callback_call(item, EFL_INPUT_EVENT_UNPRESSED, NULL);
-        return;
-     }
-
-   if (pd->longpress_timer)
-     {
-        ecore_timer_del(pd->longpress_timer);
-        pd->longpress_timer = NULL;
-     }
+   if (efl_ui_widget_disabled_get(obj)) return;
+   if (!efl_ui_item_container_get(obj)) return;
 
-   edje_object_signal_emit(wd->resize_obj, "efl,state,unpressed", "efl");
-   efl_event_callback_call(item, EFL_INPUT_EVENT_UNPRESSED, NULL);
+   efl_layout_signal_emit(obj, "efl,state,unpressed", "efl");
+   m = efl_ui_select_mode_get(efl_ui_item_container_get(obj));
 
-   m = efl_ui_select_mode_get(efl_ui_item_container_get(item));
    if ((m != EFL_UI_SELECT_MODE_SINGLE_ALWAYS) && (pd->selected))
-     _item_unselect(item, pd);
+     _item_unselect(obj, pd);
    else if (m != EFL_UI_SELECT_MODE_NONE)
-     _item_select(item, pd);
+     _item_select(obj, pd);
 }
 
-static void
-_item_mouse_move(void *data EINA_UNUSED,
-                 Evas *evas EINA_UNUSED,
-                 Evas_Object *obj EINA_UNUSED,
-                 void *event_info)
-{
-   Evas_Event_Mouse_Move *ev = event_info;
-   Eo *item = data;
-   EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd);
-   ELM_WIDGET_DATA_GET_OR_RETURN(item, wd);
-   if (wd->disabled) return;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
-     {
-        edje_object_signal_emit(wd->resize_obj, "efl,state,unpressed", "efl");
-        return;
-     }
-}
+EFL_CALLBACKS_ARRAY_DEFINE(self_listening,
+  {EFL_INPUT_EVENT_PRESSED, _item_pressed},
+  {EFL_INPUT_EVENT_UNPRESSED, _item_unpressed},
+)
 
-static void
-_item_mouse_in(void *data EINA_UNUSED,
-               Evas *evas EINA_UNUSED,
-               Evas_Object *obj EINA_UNUSED,
-               void *event_info)
-{
-   Evas_Event_Mouse_In *ev = event_info;
-   Eo *item = data;
-   EFL_UI_ITEM_DATA_GET_OR_RETURN(item, pd);
-   ELM_WIDGET_DATA_GET_OR_RETURN(item, wd);
-   if (wd->disabled) return;
-
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-}
-
-static void
-_item_mouse_callback_add(Eo *obj, void *data)
-{
-   evas_object_event_callback_add
-     (obj, EVAS_CALLBACK_MOUSE_DOWN, _item_mouse_down, data);
-   evas_object_event_callback_add
-     (obj, EVAS_CALLBACK_MOUSE_UP, _item_mouse_up, data);
-   evas_object_event_callback_add
-     (obj, EVAS_CALLBACK_MOUSE_MOVE, _item_mouse_move, data);
-   evas_object_event_callback_add
-     (obj, EVAS_CALLBACK_MOUSE_IN, _item_mouse_in, data);
-}
-
-static void
-_item_mouse_callback_del(Eo *obj, void *data)
-{
-   evas_object_event_callback_del_full
-     (obj, EVAS_CALLBACK_MOUSE_DOWN, _item_mouse_down, data);
-   evas_object_event_callback_del_full
-     (obj, EVAS_CALLBACK_MOUSE_UP, _item_mouse_up, data);
-   evas_object_event_callback_del_full
-     (obj, EVAS_CALLBACK_MOUSE_MOVE, _item_mouse_move, data);
-   evas_object_event_callback_del_full
-     (obj, EVAS_CALLBACK_MOUSE_IN, _item_mouse_in, data);
-}
 /* Mouse Controls ends */
 
 static void
@@ -335,6 +240,8 @@ _efl_ui_item_efl_object_constructor(Eo *obj, 
Efl_Ui_Item_Data *pd EINA_UNUSED)
 {
    obj = efl_constructor(efl_super(obj, MY_CLASS));
 
+   efl_event_callback_array_add(obj, self_listening(), obj);
+
    return obj;
 }
 
@@ -348,7 +255,7 @@ _efl_ui_item_efl_object_finalize(Eo *obj, Efl_Ui_Item_Data 
*pd EINA_UNUSED)
    /* Support Item Focus Feature */
    elm_widget_can_focus_set(obj, EINA_TRUE);
 
-   _item_mouse_callback_add(wd->resize_obj, eo);
+   efl_ui_clickable_util_bind_to_object(wd->resize_obj, obj);
    return eo;
 }
 
@@ -357,7 +264,6 @@ _efl_ui_item_efl_object_destructor(Eo *obj, 
Efl_Ui_Item_Data *pd EINA_UNUSED)
 {
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
 
-   _item_mouse_callback_del(wd->resize_obj, obj);
    efl_destructor(efl_super(obj, MY_CLASS));
 }
 
@@ -396,7 +302,6 @@ _efl_ui_item_container_get(const Eo *obj EINA_UNUSED, 
Efl_Ui_Item_Data *pd)
    return pd->parent;
 }
 
-
 /* Internal EO APIs and hidden overrides */
 
 #define EFL_UI_ITEM_EXTRA_OPS \
diff --git a/src/lib/elementary/efl_ui_item_private.h 
b/src/lib/elementary/efl_ui_item_private.h
index bb09c2e509..e6babde8a3 100644
--- a/src/lib/elementary/efl_ui_item_private.h
+++ b/src/lib/elementary/efl_ui_item_private.h
@@ -8,8 +8,6 @@ typedef struct _Efl_Ui_Item_Data
    // Eo Objects
    Eo *parent; /* Parent Widget */
 
-   Ecore_Timer *longpress_timer; /* Timer for longpress handle */
-
    // Boolean Data
    Eina_Bool  selected : 1; /* State for item selected */
    Eina_Bool  needs_size_calc : 1; /* Flag for Size calculation */
diff --git a/src/tests/elementary/spec/efl_test_clickable.c 
b/src/tests/elementary/spec/efl_test_clickable.c
index c6ca54883b..3068aec140 100644
--- a/src/tests/elementary/spec/efl_test_clickable.c
+++ b/src/tests/elementary/spec/efl_test_clickable.c
@@ -3,12 +3,14 @@
 #endif
 
 #include <Efl_Ui.h>
+#include <Elementary.h>
 #include "efl_ui_spec_suite.h"
 #include "suite_helpers.h"
-
+#include "eo_internal.h"
+#include "elm_widget.h"
 /* spec-meta-start
       {"test-interface":"Efl.Ui.Clickable",
-       "test-widgets": ["Efl.Ui.Button", "Efl.Ui.Image", "Efl.Ui.Panes", 
"Efl.Ui.Frame"]
+       "test-widgets": ["Efl.Ui.Button", "Efl.Ui.Image", "Efl.Ui.Panes", 
"Efl.Ui.Frame", "Efl.Ui.Item.Realized"]
        }
    spec-meta-end
  */
@@ -58,6 +60,15 @@ prepare_window(void)
         pos->x = 30;
         pos->y = 10;
      }
+   else if (efl_isa(widget, EFL_UI_ITEM_CLASS))
+     {
+        elm_widget_theme_klass_set(widget, "grid_item");
+        elm_widget_theme_element_set(widget, NULL);
+        elm_widget_theme_style_set(widget, NULL);
+        efl_ui_widget_theme_apply(widget);
+        pos->x = 30;
+        pos->y = 30;
+     }
 
    evas_smart_objects_calculate(evas_object_evas_get(win));
    evas_event_callback_add(evas_object_evas_get(win), 
EVAS_CALLBACK_RENDER_POST, prepare_window_norendered, pos);
diff --git a/src/tests/elementary/spec/efl_ui_spec_suite.c 
b/src/tests/elementary/spec/efl_ui_spec_suite.c
index dc5462a89e..50b32c362e 100644
--- a/src/tests/elementary/spec/efl_ui_spec_suite.c
+++ b/src/tests/elementary/spec/efl_ui_spec_suite.c
@@ -12,6 +12,8 @@ Evas_Object *win = NULL;
 Evas_Object *widget = NULL;
 const Efl_Class *test_content_klass = NULL;
 EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "efl_ui_widget", EFL_UI_WIDGET_CLASS);
+EFL_CLASS_SIMPLE_CLASS(efl_ui_item, "efl_ui_item", EFL_UI_ITEM_CLASS);
+#define EFL_UI_ITEM_REALIZED_CLASS efl_ui_item_realized_class_get()
 
 static void
 _setup_window_and_widget(const Efl_Class *klass, const Efl_Class 
*content_klass)

-- 


Reply via email to