Block click event on scrolling 67/134967/1
authorjunkyu han <junkyu.han@samsung.com>
Tue, 20 Jun 2017 10:59:51 +0000 (19:59 +0900)
committerjunkyu han <junkyu.han@samsung.com>
Tue, 20 Jun 2017 10:59:51 +0000 (19:59 +0900)
Change-Id: I18659ec04529d97089a9cab2e56b4f43f133a843

src/home_app_manager.c
src/widget.c

index 26c98ff28b1a4218a79b5454acd88bf04b079a4f..2609cbd061e51e31281d61ff27ce68d99c50129b 100755 (executable)
@@ -935,9 +935,6 @@ bool app_create(void *data)
        evas_event_callback_add(main_info.e, EVAS_CALLBACK_CANVAS_FOCUS_IN, _window_focus_in_cb, NULL);
        evas_event_callback_add(main_info.e, EVAS_CALLBACK_CANVAS_FOCUS_OUT, _window_focus_out_cb, NULL);
 
-       /* DYNAMICBOX init */
-       widget_init(main_info.win);
-
        /* Key register */
        key_register();
 
@@ -956,6 +953,9 @@ bool app_create(void *data)
                return false;
        }
 
+       /* DYNAMICBOX init */
+       widget_init(main_info.win);
+
        if (main_info.is_tts) {
                /* If TTS is on, use focus & do not use the enhanced scroller. */
                _D("Set tree focus as true");
index c02e2f2a6d4ad3afcbe764e85456911eff125f25..aed39605199e8d571f29d8622dbfd7f7143089ff 100755 (executable)
 
 
 static struct info {
-       Eina_Bool is_scrolling;
+       Evas_Object *pressed_widget;
        Eina_List *pended_event_list;
 } s_info = {
-       .is_scrolling = EINA_FALSE,
+       .pressed_widget = NULL,
        .pended_event_list = NULL,
 };
 
@@ -146,6 +146,16 @@ static void _widget_control_scroll_cb(void *data, Evas_Object *obj, void *event_
 }
 
 
+static void _widget_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       s_info.pressed_widget = obj;
+}
+
+static void _widget_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       s_info.pressed_widget = NULL;
+}
+
 
 HAPI Evas_Object *widget_create(Evas_Object *parent, const char *id, const char *subid, double period)
 {
@@ -182,6 +192,8 @@ HAPI Evas_Object *widget_create(Evas_Object *parent, const char *id, const char
        evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_WIDGET_CREATED, _widget_created_cb, NULL);
        evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_UPDATED, _widget_updated_cb, NULL);
        evas_object_smart_callback_add(widget, WIDGET_SMART_SIGNAL_CONTROL_SCROLLER, _widget_control_scroll_cb, NULL);
+       evas_object_event_callback_add(widget, EVAS_CALLBACK_MOUSE_DOWN, _widget_mouse_down_cb, NULL);
+       evas_object_event_callback_add(widget, EVAS_CALLBACK_MOUSE_UP, _widget_mouse_up_cb, NULL);
        return widget;
 }
 
@@ -512,6 +524,25 @@ static int uninstall_cb(const char *pkgname, enum pkgmgr_status status, double v
 
 
 
+static void _widget_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       Evas_Object *current_page = NULL;
+       page_info_s *page_info = NULL;
+       const char *widget_instance_id = NULL;
+
+       current_page = scroller_get_focused_page(scroller);
+       ret_if(!current_page);
+
+       page_info = evas_object_data_get(current_page, DATA_KEY_PAGE_INFO);
+       ret_if(!page_info);
+
+       ret_if(page_info->item != s_info.pressed_widget);
+
+       widget_viewer_evas_cancel_click_event(page_info->item);
+}
+
+
+
 HAPI void widget_init(Evas_Object *win)
 {
        int val;
@@ -530,6 +561,17 @@ HAPI void widget_init(Evas_Object *win)
 
        widget_viewer_evas_init(win);
        widget_viewer_evas_set_option(WIDGET_VIEWER_EVAS_SCROLL_X, 1);
+
+       main_s *main_info = NULL;
+       Evas_Object *scroller = NULL;
+
+       main_info = main_get_info();
+       ret_if(!main_info);
+
+       scroller = elm_object_part_content_get(main_info->layout, "scroller");
+       ret_if(!scroller);
+
+       evas_object_smart_callback_add(scroller, "scroll,drag,start", _widget_scroll_cb, NULL);
 }