diff options
author | Mike Blumenkrantz <zmike@osg.samsung.com> | 2018-01-17 17:33:57 -0500 |
---|---|---|
committer | Mike Blumenkrantz <zmike@osg.samsung.com> | 2018-01-17 16:41:41 -0500 |
commit | 11a9ed301dee2d4af9609465ade7685136ad49cc (patch) | |
tree | 8f56829f3c70ae7876398b283c1749cca2fe1394 /src/lib/efl_wl/efl_wl.c | |
parent | b7eba8af7b1c31d8718b19c5539746e2e4be8b54 (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 '')
-rw-r--r-- | src/lib/efl_wl/efl_wl.c | 122 |
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 | ||
254 | typedef struct Comp_Buffer_State | 255 | typedef 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 | ||
1959 | static void | 1960 | static Eina_Bool |
1960 | comp_surface_send_pointer_enter(Comp_Surface *cs, Comp_Seat *s, int cx, int cy) | 1961 | comp_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 | ||
1986 | static void | 1988 | static void |
1987 | comp_surface_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) | 1989 | comp_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 | ||
1995 | static void | 2003 | static 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 | ||
2009 | static void | 2017 | static Eina_Bool |
2010 | comp_surface_send_pointer_leave(Comp_Surface *cs, Comp_Seat *s) | 2018 | comp_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 | ||
2033 | static void | 2042 | static void |
2034 | comp_surface_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) | 2043 | comp_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 | ||
2042 | static void | 2057 | static Eina_Bool |
2043 | comp_surface_mouse_button(Comp_Surface *cs, Comp_Seat *s, uint32_t timestamp, uint32_t button_id, uint32_t state) | 2058 | comp_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 | ||
2109 | static void | 2125 | static void |
2110 | comp_surface_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) | 2126 | comp_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 | ||
2118 | static void | 2140 | static void |
2119 | comp_surface_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) | 2141 | comp_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 | ||
2127 | static void | 2155 | static 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 | ||
2170 | static void | 2200 | static 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 | ||
2201 | static void | 2233 | static 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 | ||
2231 | static void | 2267 | static 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 | ||
2261 | static void | 2301 | static 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) |