summaryrefslogtreecommitdiff
path: root/src/lib/efl_wl
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2018-01-17 17:33:57 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2018-01-17 16:41:41 -0500
commit11a9ed301dee2d4af9609465ade7685136ad49cc (patch)
tree8f56829f3c70ae7876398b283c1749cca2fe1394 /src/lib/efl_wl
parentb7eba8af7b1c31d8718b19c5539746e2e4be8b54 (diff)
efl-wl: set event ON_HOLD flag when they are sent to a surface
use a flag to indicate when processed events have been internally processed @fix
Diffstat (limited to 'src/lib/efl_wl')
-rw-r--r--src/lib/efl_wl/efl_wl.c122
1 files changed, 92 insertions, 30 deletions
diff --git a/src/lib/efl_wl/efl_wl.c b/src/lib/efl_wl/efl_wl.c
index 5f04eed930..88a9600b21 100644
--- a/src/lib/efl_wl/efl_wl.c
+++ b/src/lib/efl_wl/efl_wl.c
@@ -249,6 +249,7 @@ typedef struct Comp_Seat
249 Eina_Bool focused : 1; 249 Eina_Bool focused : 1;
250 Eina_Bool selection_changed : 1; 250 Eina_Bool selection_changed : 1;
251 Eina_Bool selection_exists : 1; 251 Eina_Bool selection_exists : 1;
252 Eina_Bool event_propagate : 1;
252} Comp_Seat; 253} Comp_Seat;
253 254
254typedef struct Comp_Buffer_State 255typedef struct Comp_Buffer_State
@@ -1956,7 +1957,7 @@ comp_surface_send_data_device_enter(Comp_Surface *cs, Comp_Seat *s)
1956 wl_fixed_from_int(cx - x), wl_fixed_from_int(cy - y), offer); 1957 wl_fixed_from_int(cx - x), wl_fixed_from_int(cy - y), offer);
1957} 1958}
1958 1959
1959static void 1960static Eina_Bool
1960comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy) 1961comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy)
1961{ 1962{
1962 Eina_List *l, *ll; 1963 Eina_List *l, *ll;
@@ -1964,32 +1965,39 @@ comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy)
1964 uint32_t serial; 1965 uint32_t serial;
1965 int x, y; 1966 int x, y;
1966 1967
1967 if (s->ptr.enter && (cs != s->grab)) return; 1968 if (s->ptr.enter && (cs != s->grab)) return EINA_FALSE;
1968 if (!comp_surface_check_grab(cs, s)) return; 1969 if (!comp_surface_check_grab(cs, s)) return EINA_FALSE;
1969 s->ptr.enter = cs; 1970 s->ptr.enter = cs;
1970 if (cs->dead) return; 1971 if (cs->dead) return EINA_FALSE;
1971 if (s->drag.res && (!s->drag.tch)) 1972 if (s->drag.res && (!s->drag.tch))
1972 { 1973 {
1973 comp_surface_send_data_device_enter(cs, s); 1974 comp_surface_send_data_device_enter(cs, s);
1974 return; 1975 return EINA_TRUE;
1975 } 1976 }
1976 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res)); 1977 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res));
1977 if (!l) return; 1978 if (!l) return EINA_FALSE;
1978 s->ptr.enter_serial = serial = wl_display_next_serial(cs->c->display); 1979 s->ptr.enter_serial = serial = wl_display_next_serial(cs->c->display);
1979 //fprintf(stderr, "ENTER %s\n", cs->shell.popup ? "POPUP" : "TOPLEVEL"); 1980 //fprintf(stderr, "ENTER %s\n", cs->shell.popup ? "POPUP" : "TOPLEVEL");
1980 evas_object_geometry_get(cs->obj, &x, &y, NULL, NULL); 1981 evas_object_geometry_get(cs->obj, &x, &y, NULL, NULL);
1981 EINA_LIST_FOREACH(l, ll, res) 1982 EINA_LIST_FOREACH(l, ll, res)
1982 wl_pointer_send_enter(res, serial, cs->res, 1983 wl_pointer_send_enter(res, serial, cs->res,
1983 wl_fixed_from_int(cx - x), wl_fixed_from_int(cy - y)); 1984 wl_fixed_from_int(cx - x), wl_fixed_from_int(cy - y));
1985 return EINA_TRUE;
1984} 1986}
1985 1987
1986static void 1988static void
1987comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) 1989comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
1988{ 1990{
1989 Evas_Event_Mouse_In *ev = event_info; 1991 Evas_Event_Mouse_In *ev = event_info;
1992 Comp_Seat *s;
1990 1993
1991 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; 1994 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
1992 comp_surface_send_pointer_enter(data, seat_find(data, ev->dev), ev->canvas.x, ev->canvas.y); 1995 s = seat_find(data, ev->dev);
1996 if (comp_surface_send_pointer_enter(data, s, ev->canvas.x, ev->canvas.y))
1997 {
1998 s->event_propagate = 1;
1999 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2000 }
1993} 2001}
1994 2002
1995static void 2003static void
@@ -2006,40 +2014,47 @@ comp_surface_send_data_device_leave(Comp_Surface *cs, Comp_Seat *s)
2006 wl_data_device_send_leave(res); 2014 wl_data_device_send_leave(res);
2007} 2015}
2008 2016
2009static void 2017static Eina_Bool
2010comp_surface_send_pointer_leave(Comp_Surface *cs, Comp_Seat *s) 2018comp_surface_send_pointer_leave(Comp_Surface *cs, Comp_Seat *s)
2011{ 2019{
2012 Eina_List *l, *ll; 2020 Eina_List *l, *ll;
2013 struct wl_resource *res; 2021 struct wl_resource *res;
2014 uint32_t serial; 2022 uint32_t serial;
2015 2023
2016 if (s->ptr.enter != cs) return; 2024 if (s->ptr.enter != cs) return EINA_FALSE;
2017 if (!comp_surface_check_grab(cs, s)) return; 2025 if (!comp_surface_check_grab(cs, s)) return EINA_FALSE;
2018 s->ptr.enter = NULL; 2026 s->ptr.enter = NULL;
2019 if (cs->dead) return; 2027 if (cs->dead) return EINA_FALSE;
2020 if (s->drag.res) 2028 if (s->drag.res)
2021 { 2029 {
2022 comp_surface_send_data_device_leave(cs, s); 2030 comp_surface_send_data_device_leave(cs, s);
2023 return; 2031 return EINA_TRUE;
2024 } 2032 }
2025 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res)); 2033 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res));
2026 if (!l) return; 2034 if (!l) return EINA_FALSE;
2027 serial = wl_display_next_serial(cs->c->display); 2035 serial = wl_display_next_serial(cs->c->display);
2028 //fprintf(stderr, "LEAVE %s\n", cs->shell.popup ? "POPUP" : "TOPLEVEL"); 2036 //fprintf(stderr, "LEAVE %s\n", cs->shell.popup ? "POPUP" : "TOPLEVEL");
2029 EINA_LIST_FOREACH(l, ll, res) 2037 EINA_LIST_FOREACH(l, ll, res)
2030 wl_pointer_send_leave(res, serial, cs->res); 2038 wl_pointer_send_leave(res, serial, cs->res);
2039 return EINA_TRUE;
2031} 2040}
2032 2041
2033static void 2042static void
2034comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) 2043comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
2035{ 2044{
2036 Evas_Event_Mouse_Out *ev = event_info; 2045 Evas_Event_Mouse_Out *ev = event_info;
2046 Comp_Seat *s;
2037 2047
2038 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; 2048 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
2039 comp_surface_send_pointer_leave(data, seat_find(data, ev->dev)); 2049 s = seat_find(data, ev->dev);
2050 if (comp_surface_send_pointer_leave(data, s))
2051 {
2052 s->event_propagate = 1;
2053 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2054 }
2040} 2055}
2041 2056
2042static void 2057static Eina_Bool
2043comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, uint32_t button_id, uint32_t state) 2058comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, uint32_t button_id, uint32_t state)
2044{ 2059{
2045 uint32_t serial, btn; 2060 uint32_t serial, btn;
@@ -2073,13 +2088,13 @@ comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, ui
2073 btn = button_id + BTN_SIDE - 8; 2088 btn = button_id + BTN_SIDE - 8;
2074 break; 2089 break;
2075 } 2090 }
2076 if (s->ptr.enter != cs) return; 2091 if (s->ptr.enter != cs) return EINA_FALSE;
2077 if (!comp_surface_check_grab(cs, s)) return; 2092 if (!comp_surface_check_grab(cs, s)) return EINA_FALSE;
2078 if (state == WL_POINTER_BUTTON_STATE_PRESSED) 2093 if (state == WL_POINTER_BUTTON_STATE_PRESSED)
2079 s->ptr.button_mask |= 1 << button_id; 2094 s->ptr.button_mask |= 1 << button_id;
2080 else 2095 else
2081 { 2096 {
2082 if (!(s->ptr.button_mask & (1 << button_id))) return; 2097 if (!(s->ptr.button_mask & (1 << button_id))) return EINA_FALSE;
2083 s->ptr.button_mask &= ~(1 << button_id); 2098 s->ptr.button_mask &= ~(1 << button_id);
2084 if (s->drag.res && (!s->drag.tch)) 2099 if (s->drag.res && (!s->drag.tch))
2085 { 2100 {
@@ -2087,41 +2102,54 @@ comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, ui
2087 comp_surface_input_event(&s->ptr.events, button_id, 0, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED); 2102 comp_surface_input_event(&s->ptr.events, button_id, 0, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED);
2088 s->ptr.enter = NULL; 2103 s->ptr.enter = NULL;
2089 comp_surface_send_pointer_enter(cs, s, s->ptr.pos.x, s->ptr.pos.y); 2104 comp_surface_send_pointer_enter(cs, s, s->ptr.pos.x, s->ptr.pos.y);
2090 return; 2105 return EINA_TRUE;
2091 } 2106 }
2092 } 2107 }
2093 2108
2094 if (cs->dead) 2109 if (cs->dead)
2095 { 2110 {
2096 comp_surface_input_event(&s->ptr.events, button_id, 0, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED); 2111 comp_surface_input_event(&s->ptr.events, button_id, 0, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED);
2097 return; 2112 return EINA_TRUE;
2098 } 2113 }
2099 2114
2100 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res)); 2115 l = seat_ptr_resources_get(s, wl_resource_get_client(cs->res));
2101 if (!l) return; 2116 if (!l) return EINA_FALSE;
2102 serial = wl_display_next_serial(s->c->display); 2117 serial = wl_display_next_serial(s->c->display);
2103 comp_surface_input_event(&s->ptr.events, button_id, serial, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED); 2118 comp_surface_input_event(&s->ptr.events, button_id, serial, timestamp, state == WL_POINTER_BUTTON_STATE_RELEASED);
2104 2119
2105 EINA_LIST_FOREACH(l, ll, res) 2120 EINA_LIST_FOREACH(l, ll, res)
2106 wl_pointer_send_button(res, serial, timestamp, btn, state); 2121 wl_pointer_send_button(res, serial, timestamp, btn, state);
2122 return EINA_TRUE;
2107} 2123}
2108 2124
2109static void 2125static void
2110comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) 2126comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
2111{ 2127{
2112 Evas_Event_Mouse_Down *ev = event_info; 2128 Evas_Event_Mouse_Down *ev = event_info;
2129 Comp_Seat *s;
2113 2130
2114 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; 2131 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
2115 comp_surface_mouse_button(data, seat_find(data, ev->dev), ev->timestamp, ev->button, WL_POINTER_BUTTON_STATE_PRESSED); 2132 s = seat_find(data, ev->dev);
2133 if (comp_surface_mouse_button(data, s, ev->timestamp, ev->button, WL_POINTER_BUTTON_STATE_PRESSED))
2134 {
2135 s->event_propagate = 1;
2136 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2137 }
2116} 2138}
2117 2139
2118static void 2140static void
2119comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) 2141comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
2120{ 2142{
2121 Evas_Event_Mouse_Down *ev = event_info; 2143 Evas_Event_Mouse_Down *ev = event_info;
2144 Comp_Seat *s;
2122 2145
2123 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; 2146 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
2124 comp_surface_mouse_button(data, seat_find(data, ev->dev), ev->timestamp, ev->button, WL_POINTER_BUTTON_STATE_RELEASED); 2147 s = seat_find(data, ev->dev);
2148 if (comp_surface_mouse_button(data, s, ev->timestamp, ev->button, WL_POINTER_BUTTON_STATE_RELEASED))
2149 {
2150 s->event_propagate = 1;
2151 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2152 }
2125} 2153}
2126 2154
2127static void 2155static void
@@ -2165,6 +2193,8 @@ comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
2165 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y)); 2193 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y));
2166 } 2194 }
2167 } 2195 }
2196 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2197 s->event_propagate = 1;
2168} 2198}
2169 2199
2170static void 2200static void
@@ -2196,6 +2226,8 @@ comp_surface_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EI
2196 if (!l) return; 2226 if (!l) return;
2197 EINA_LIST_FOREACH(l, ll, res) 2227 EINA_LIST_FOREACH(l, ll, res)
2198 wl_pointer_send_axis(res, ev->timestamp, axis, dir); 2228 wl_pointer_send_axis(res, ev->timestamp, axis, dir);
2229 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2230 s->event_propagate = 1;
2199} 2231}
2200 2232
2201static void 2233static void
@@ -2218,6 +2250,8 @@ comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
2218 if (!l) 2250 if (!l)
2219 { 2251 {
2220 comp_surface_input_event(&s->tch.events, ev->device, 0, ev->timestamp, 0); 2252 comp_surface_input_event(&s->tch.events, ev->device, 0, ev->timestamp, 0);
2253 s->event_propagate = 1;
2254 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2221 return; 2255 return;
2222 } 2256 }
2223 evas_object_geometry_get(cs->obj, &x, &y, NULL, NULL); 2257 evas_object_geometry_get(cs->obj, &x, &y, NULL, NULL);
@@ -2226,6 +2260,8 @@ comp_surface_multi_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
2226 EINA_LIST_FOREACH(l, ll, res) 2260 EINA_LIST_FOREACH(l, ll, res)
2227 wl_touch_send_down(res, serial, ev->timestamp, cs->res, ev->device, 2261 wl_touch_send_down(res, serial, ev->timestamp, cs->res, ev->device,
2228 wl_fixed_from_int(ev->canvas.x - x), wl_fixed_from_int(ev->canvas.y - y)); 2262 wl_fixed_from_int(ev->canvas.x - x), wl_fixed_from_int(ev->canvas.y - y));
2263 s->event_propagate = 1;
2264 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2229} 2265}
2230 2266
2231static void 2267static void
@@ -2250,12 +2286,16 @@ comp_surface_multi_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
2250 if (s->drag.tch) 2286 if (s->drag.tch)
2251 wl_data_device_send_drop(data_device_find(s, cs->res)); 2287 wl_data_device_send_drop(data_device_find(s, cs->res));
2252 comp_surface_input_event(&s->tch.events, ev->device, 0, ev->timestamp, 1); 2288 comp_surface_input_event(&s->tch.events, ev->device, 0, ev->timestamp, 1);
2289 s->event_propagate = 1;
2290 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2253 return; 2291 return;
2254 } 2292 }
2255 serial = wl_display_next_serial(cs->c->display); 2293 serial = wl_display_next_serial(cs->c->display);
2256 comp_surface_input_event(&s->tch.events, ev->device, serial, ev->timestamp, 1); 2294 comp_surface_input_event(&s->tch.events, ev->device, serial, ev->timestamp, 1);
2257 EINA_LIST_FOREACH(l, ll, res) 2295 EINA_LIST_FOREACH(l, ll, res)
2258 wl_touch_send_up(res, serial, ev->timestamp, ev->device); 2296 wl_touch_send_up(res, serial, ev->timestamp, ev->device);
2297 s->event_propagate = 1;
2298 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2259} 2299}
2260 2300
2261static void 2301static void
@@ -2277,8 +2317,12 @@ comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
2277 if (s->drag.enter != cs) return; 2317 if (s->drag.enter != cs) return;
2278 res = data_device_find(s, cs->res); 2318 res = data_device_find(s, cs->res);
2279 if (res) 2319 if (res)
2280 wl_data_device_send_motion(res, ev->timestamp, 2320 {
2281 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y)); 2321 wl_data_device_send_motion(res, ev->timestamp,
2322 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y));
2323 s->event_propagate = 1;
2324 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2325 }
2282 return; 2326 return;
2283 } 2327 }
2284 else 2328 else
@@ -2290,6 +2334,8 @@ comp_surface_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
2290 EINA_LIST_FOREACH(l, ll, res) 2334 EINA_LIST_FOREACH(l, ll, res)
2291 wl_touch_send_motion(res, ev->timestamp, ev->device, 2335 wl_touch_send_motion(res, ev->timestamp, ev->device,
2292 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y)); 2336 wl_fixed_from_int(ev->cur.canvas.x - x), wl_fixed_from_int(ev->cur.canvas.y - y));
2337 s->event_propagate = 1;
2338 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
2293 } 2339 }
2294} 2340}
2295 2341
@@ -4907,9 +4953,13 @@ comp_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
4907 Comp *c = data; 4953 Comp *c = data;
4908 Evas_Event_Mouse_In *ev = event_info; 4954 Evas_Event_Mouse_In *ev = event_info;
4909 Comp_Seat *s; 4955 Comp_Seat *s;
4910
4911 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
4912 s = comp_seat_find(c, ev->dev); 4956 s = comp_seat_find(c, ev->dev);
4957
4958 if (!s->event_propagate)
4959 {
4960 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
4961 }
4962 s->event_propagate = 0;
4913 if (s->drag.proxy_win) 4963 if (s->drag.proxy_win)
4914 { 4964 {
4915 ecore_evas_free(s->drag.proxy_win); 4965 ecore_evas_free(s->drag.proxy_win);
@@ -4943,8 +4993,12 @@ comp_multi_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
4943 Comp_Seat *s; 4993 Comp_Seat *s;
4944 int w, h; 4994 int w, h;
4945 4995
4946 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
4947 s = comp_seat_find(c, ev->dev); 4996 s = comp_seat_find(c, ev->dev);
4997 if (!s->event_propagate)
4998 {
4999 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
5000 }
5001 s->event_propagate = 0;
4948 s->tch.pos.x = ev->cur.canvas.x; 5002 s->tch.pos.x = ev->cur.canvas.x;
4949 s->tch.pos.y = ev->cur.canvas.y; 5003 s->tch.pos.y = ev->cur.canvas.y;
4950 if ((!s->drag.tch) || (!s->drag.surface)) return; 5004 if ((!s->drag.tch) || (!s->drag.surface)) return;
@@ -4960,8 +5014,12 @@ comp_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v
4960 Comp_Seat *s; 5014 Comp_Seat *s;
4961 int w, h; 5015 int w, h;
4962 5016
4963 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
4964 s = comp_seat_find(c, ev->dev); 5017 s = comp_seat_find(c, ev->dev);
5018 if (!s->event_propagate)
5019 {
5020 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
5021 }
5022 s->event_propagate = 0;
4965 s->ptr.pos.x = ev->cur.canvas.x; 5023 s->ptr.pos.x = ev->cur.canvas.x;
4966 s->ptr.pos.y = ev->cur.canvas.y; 5024 s->ptr.pos.y = ev->cur.canvas.y;
4967 if (s->drag.tch || (!s->drag.surface)) return; 5025 if (s->drag.tch || (!s->drag.surface)) return;
@@ -4979,8 +5037,12 @@ comp_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_in
4979 const char **types, *type; 5037 const char **types, *type;
4980 unsigned int i = 0; 5038 unsigned int i = 0;
4981 5039
4982 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
4983 s = comp_seat_find(c, ev->dev); 5040 s = comp_seat_find(c, ev->dev);
5041 if (!s->event_propagate)
5042 {
5043 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
5044 }
5045 s->event_propagate = 0;
4984 s->ptr.in = 0; 5046 s->ptr.in = 0;
4985 ecore_evas_cursor_device_unset(ecore_evas_ecore_evas_get(e), ev->dev); 5047 ecore_evas_cursor_device_unset(ecore_evas_ecore_evas_get(e), ev->dev);
4986 if (s->ptr.efl.obj) 5048 if (s->ptr.efl.obj)