From d52252392a7bfbb080b3ae79e121035f33a02ead Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Fri, 25 Aug 2017 19:25:39 +0900 Subject: [PATCH] Do not send duplicate mouse cancel event Change-Id: I2a9d98ea5e27276a7bc1dde57d80073c768acc93 Signed-off-by: Hyunho Kang --- .../src/screen_connector_toolkit_evas.c | 80 +++++++++++++--------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c index b9ef88b..57a111f 100644 --- a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c +++ b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c @@ -59,6 +59,7 @@ struct _screen_connector_toolkit_evas_h { screen_connector_toolkit_h toolkit_h; int freeze; bool is_init; + bool is_down; Evas_Object *img_tbm; Evas_Object *img_file; uint32_t img_type; @@ -93,6 +94,23 @@ static void __rs_cb_hide(void *data, Evas *e, Evas_Object *obj, void *event_info static void __rs_cb_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void __obj_update_visibility(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void __cancel_touch(screen_connector_toolkit_evas_h h) +{ + struct tizen_remote_surface *surface; + + if (!h->is_down) + return; + + h->is_down = false; + surface = screen_connector_toolkit_get_trs(h->toolkit_h); + if (!surface) { + LOGE("failed to get tizen remote surface"); + return; + } + + tizen_remote_surface_transfer_touch_cancel(surface); +} + static gint __comp_win_id(gconstpointer a, gconstpointer b) { viewer_visibility_h win = (viewer_visibility_h)a; @@ -482,9 +500,9 @@ static int __set_visibility(screen_connector_toolkit_evas_h toolkit_evas_h, visi if (__delayed_resuming_time == 0 || toolkit_evas_h->screen_type == SCREEN_CONNECTOR_SCREEN_TYPE_WATCH) { if (obscured == TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE) - tizen_remote_surface_transfer_touch_cancel(surface); + __cancel_touch(toolkit_evas_h); - LOGI("normal resume"); + LOGI("normal visibility %d", obscured); tizen_remote_surface_transfer_visibility(surface, obscured); return 0; @@ -496,7 +514,7 @@ static int __set_visibility(screen_connector_toolkit_evas_h toolkit_evas_h, visi toolkit_evas_h->resuming_timer = 0; } - tizen_remote_surface_transfer_touch_cancel(surface); + __cancel_touch(toolkit_evas_h); tizen_remote_surface_transfer_visibility(surface, obscured); } else { if (toolkit_evas_h->resuming_timer == 0) { @@ -634,6 +652,7 @@ static void __rs_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *even return; } + toolkit_evas_h->is_down = true; tizen_remote_surface_transfer_mouse_event(surface, TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN, 0, @@ -680,6 +699,12 @@ static void __rs_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_ return; } + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) { + LOGD("Event canceld"); + __cancel_touch(toolkit_evas_h); + return; + } + /* * We need to send move event for * consistency with old widget framework @@ -699,6 +724,7 @@ static void __rs_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_ desc, ev->timestamp); + toolkit_evas_h->is_down = false; tizen_remote_surface_transfer_mouse_event(surface, TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP, 0, @@ -1466,7 +1492,6 @@ EXPORT_API int screen_connector_toolkit_evas_send_mouse_up(Evas_Object *obj) EXPORT_API int screen_connector_toolkit_evas_send_touch_cancel(Evas_Object *obj) { screen_connector_toolkit_evas_h toolkit_evas_h; - struct tizen_remote_surface *surface; toolkit_evas_h = __find_toolkit_evas_h(obj); if (!toolkit_evas_h) { @@ -1475,15 +1500,9 @@ EXPORT_API int screen_connector_toolkit_evas_send_touch_cancel(Evas_Object *obj) } if (toolkit_evas_h->img_tbm) { - surface = screen_connector_toolkit_get_trs(toolkit_evas_h->toolkit_h); - if (surface == NULL) { - LOGE("surface is NULL"); - return -1; - } - - tizen_remote_surface_transfer_touch_cancel(surface); + __cancel_touch(toolkit_evas_h); } else { - LOGE("surface not yet initialized."); + LOGE("Null tbm image."); return -1; } @@ -1627,19 +1646,18 @@ EXPORT_API int screen_connector_toolkit_evas_bind(screen_connector_toolkit_evas_ } h->bind_win_id = bind_win_id; - trs = screen_connector_toolkit_get_trs(h->toolkit_h); - if (trs) { - tizen_remote_surface_transfer_touch_cancel(trs); - } else { - LOGE("failed to get tizen remote surface"); - return -1; - } - + __cancel_touch(h); if (h->cur_buffer) { + trs = screen_connector_toolkit_get_trs(h->toolkit_h); + if (trs == NULL) { + LOGE("failed to get tizen remote surface"); + return -1; + } + if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) { - c_buf_info = g_hash_table_lookup( - __cur_buffer_table, h->cur_buffer); + c_buf_info = g_hash_table_lookup(__cur_buffer_table, + h->cur_buffer); if (c_buf_info != NULL) __cur_buffer_info_unref(trs, c_buf_info); } @@ -1694,20 +1712,18 @@ EXPORT_API int screen_connector_toolkit_evas_set_changed_event_filter( return ret; } - trs = screen_connector_toolkit_get_trs(toolkit_evas_h->toolkit_h); - if (trs) { - tizen_remote_surface_transfer_touch_cancel(trs); - } else { - LOGE("failed to get tizen remote surface"); - return -1; - } - + __cancel_touch(toolkit_evas_h); toolkit_evas_h->blocked = true; if (toolkit_evas_h->cur_buffer) { + trs = screen_connector_toolkit_get_trs(toolkit_evas_h->toolkit_h); + if (trs == NULL) { + LOGE("failed to get tizen remote surface"); + return -1; + } + if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) { - c_buf_info = g_hash_table_lookup( - __cur_buffer_table, + c_buf_info = g_hash_table_lookup(__cur_buffer_table, toolkit_evas_h->cur_buffer); if (c_buf_info != NULL) __cur_buffer_info_unref(trs, c_buf_info); -- 2.7.4