summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunho Kang <hhstark.kang@samsung.com>2017-08-25 19:25:39 +0900
committerHyunho Kang <hhstark.kang@samsung.com>2017-10-17 12:06:33 +0900
commitd52252392a7bfbb080b3ae79e121035f33a02ead (patch)
treecce914c5cca43df17eeefdc32a137b919082a53a
parent5a3cb52941e4144d862cec1dc03d7578ccb47305 (diff)
downloadscreen-connector-d52252392a7bfbb080b3ae79e121035f33a02ead.tar.gz
screen-connector-d52252392a7bfbb080b3ae79e121035f33a02ead.tar.bz2
screen-connector-d52252392a7bfbb080b3ae79e121035f33a02ead.zip
Do not send duplicate mouse cancel event
Change-Id: I2a9d98ea5e27276a7bc1dde57d80073c768acc93 Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
-rw-r--r--screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c80
1 files 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);