Summary:
if wl2_input logic gets a 'touch down' event from touch device,
input->focus.touch has set and it cause the logic handles every input as touch input
from that moment at _ecore_wl2_input_mouse_move_send function.
that is the reason why the patch(
410c1f95879e46a5e52132662d4c43b74e95a251) has written for.
however, if there are multiple touch input devices,
clearing focus.touch variable without checking any conditions causes another problem.
I mean a case such as 'touch 1 down' -> 'touch 2 down' -> 'touch 1 up' -> 'touch 2 up'
at the moment 'touch 1 up' event executed, focus.touch would be cleared,
and 'touch 2 up' and following touch events will not be executed properly at the moment.
this patch counts a number of touch devices which are grabbing to clear focus.touch at proper time.
Reviewers: devilhorns
Reviewed By: devilhorns
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D8787
Change-Id: I95b64df82f17069762aa93a60b0eb048805e5bac
Signed-off-by: Wonki Kim <wonki_.kim@samsung.com>
input->grab.window = NULL;
input->grab.button = 0;
input->grab.count = 0;
+ input->grab.touch_count = 0;
}
static void
input->focus.touch = window;
input->timestamp = timestamp;
+ input->grab.touch_count++;
// TIZEN_ONLY(20171109): support a tizen_input_device_manager interface
_ecore_wl2_input_touch_axis_process(input, id);
BTN_LEFT, timestamp);
if (input->grab.count) input->grab.count--;
+ if (input->grab.touch_count) input->grab.touch_count--;
if ((input->grab.window) && (input->grab.button == BTN_LEFT) &&
(!input->grab.count))
_ecore_wl2_input_ungrab(input);
- input->focus.touch = NULL;
+ if (input->grab.touch_count == 0) input->focus.touch = NULL;
+
}
static void
{
unsigned int button, count, timestamp;
Ecore_Wl2_Window *window;
+ unsigned int touch_count;
} grab;
struct