summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-02-06 17:54:08 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-02-06 17:54:08 -0500
commit7171135792b1f443ef9f27818ab08dadfe3bf267 (patch)
tree9b383682dff96ef24a32cd5df21f3cd843b930ac
parent88e5369eeeba803d44374a577b09f34d5d0f3016 (diff)
downloadefl-7171135792b1f443ef9f27818ab08dadfe3bf267.tar.gz
ecore evas should not crash when unsetting pointer
ref D812 disappointed.jpg
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.c1
-rw-r--r--src/lib/ecore_evas/ecore_evas_ews.c7
-rw-r--r--src/lib/ecore_evas/ecore_evas_private.h1
-rw-r--r--src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c7
-rw-r--r--src/modules/ecore_evas/engines/drm/ecore_evas_drm.c8
-rw-r--r--src/modules/ecore_evas/engines/extn/ecore_evas_extn.c2
-rw-r--r--src/modules/ecore_evas/engines/fb/ecore_evas_fb.c7
-rw-r--r--src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c7
-rw-r--r--src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c7
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c6
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c1
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h1
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c1
-rw-r--r--src/modules/ecore_evas/engines/win32/ecore_evas_win32.c9
-rw-r--r--src/modules/ecore_evas/engines/x/ecore_evas_x.c7
15 files changed, 71 insertions, 1 deletions
diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c
index fa7bab232d..70a64ac4f8 100644
--- a/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -572,6 +572,7 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
NULL,
NULL,
NULL,
+ NULL,
_ecore_evas_buffer_alpha_set,
NULL, //transparent
NULL, // profiles_set
diff --git a/src/lib/ecore_evas/ecore_evas_ews.c b/src/lib/ecore_evas/ecore_evas_ews.c
index afffa5e9f2..cf4e6e3113 100644
--- a/src/lib/ecore_evas/ecore_evas_ews.c
+++ b/src/lib/ecore_evas/ecore_evas_ews.c
@@ -407,6 +407,12 @@ _ecore_evas_ews_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *
}
static void
+_ecore_evas_ews_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_ews_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_ews_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
@@ -671,6 +677,7 @@ static const Ecore_Evas_Engine_Func _ecore_ews_engine_func =
_ecore_evas_ews_size_base_set,
_ecore_evas_ews_size_step_set,
_ecore_evas_ews_object_cursor_set,
+ _ecore_evas_ews_object_cursor_unset,
_ecore_evas_ews_layer_set,
_ecore_evas_ews_focus_set,
_ecore_evas_ews_iconified_set,
diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h
index 34635991f5..dc11228ff8 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -87,6 +87,7 @@ struct _Ecore_Evas_Engine_Func
void (*fn_size_base_set) (Ecore_Evas *ee, int w, int h);
void (*fn_size_step_set) (Ecore_Evas *ee, int w, int h);
void (*fn_object_cursor_set) (Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
+ void (*fn_object_cursor_unset) (Ecore_Evas *ee);
void (*fn_layer_set) (Ecore_Evas *ee, int layer);
void (*fn_focus_set) (Ecore_Evas *ee, Eina_Bool on);
void (*fn_iconified_set) (Ecore_Evas *ee, Eina_Bool on);
diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
index f66b7be16e..3ac93c3e61 100644
--- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
+++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
@@ -346,6 +346,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
+_ecore_evas_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
@@ -465,6 +471,7 @@ static Ecore_Evas_Engine_Func _ecore_cocoa_engine_func =
NULL,
NULL,
_ecore_evas_object_cursor_set,
+ _ecore_evas_object_cursor_unset,
NULL,
NULL,
NULL,
diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
index 8ff1d394d7..3de46684ba 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -53,6 +53,7 @@ static void _ecore_evas_drm_size_max_set(Ecore_Evas *ee, int w, int h);
static void _ecore_evas_drm_size_base_set(Ecore_Evas *ee, int w, int h);
static void _ecore_evas_drm_size_step_set(Ecore_Evas *ee, int w, int h);
static void _ecore_evas_drm_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
+static void _ecore_evas_drm_object_cursor_unset(Ecore_Evas *ee);
static void _ecore_evas_drm_layer_set(Ecore_Evas *ee, int layer);
static void _ecore_evas_drm_iconified_set(Ecore_Evas *ee, Eina_Bool on);
static void _ecore_evas_drm_borderless_set(Ecore_Evas *ee, Eina_Bool on);
@@ -110,6 +111,7 @@ static Ecore_Evas_Engine_Func _ecore_evas_drm_engine_func =
_ecore_evas_drm_size_base_set,
_ecore_evas_drm_size_step_set,
_ecore_evas_drm_object_cursor_set,
+ _ecore_evas_drm_object_cursor_unset,
_ecore_evas_drm_layer_set,
NULL, //void (*fn_focus_set) (Ecore_Evas *ee, Eina_Bool on);
_ecore_evas_drm_iconified_set,
@@ -764,6 +766,12 @@ _ecore_evas_drm_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *
}
static void
+_ecore_evas_drm_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_drm_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_drm_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
index a524a43ddf..9cb7f6f3ce 100644
--- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
+++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
@@ -850,6 +850,7 @@ static const Ecore_Evas_Engine_Func _ecore_extn_plug_engine_func =
NULL,
NULL,
NULL,
+ NULL,
NULL, //transparent
NULL, // profiles_set
_ecore_evas_extn_plug_profile_set,
@@ -1986,6 +1987,7 @@ static const Ecore_Evas_Engine_Func _ecore_extn_socket_engine_func =
NULL,
NULL,
NULL,
+ NULL,
_ecore_evas_extn_socket_alpha_set,
NULL, //transparent
_ecore_evas_extn_socket_available_profiles_set,
diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
index 5373dd7e41..8d008ac600 100644
--- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
+++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
@@ -426,6 +426,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
+_ecore_evas_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
@@ -572,6 +578,7 @@ static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
NULL,
NULL,
_ecore_evas_object_cursor_set,
+ _ecore_evas_object_cursor_unset,
NULL,
NULL,
NULL,
diff --git a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
index 71de3b94b6..011aeda7af 100644
--- a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
+++ b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
@@ -316,6 +316,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
+_ecore_evas_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
@@ -394,6 +400,7 @@ static Ecore_Evas_Engine_Func _ecore_psl1ght_engine_func =
NULL,
NULL,
_ecore_evas_object_cursor_set,
+ _ecore_evas_object_cursor_unset,
NULL,
NULL,
NULL,
diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
index 4ffbf3d02e..9a0e69b712 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -404,6 +404,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
+_ecore_evas_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y;
@@ -483,6 +489,7 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
NULL,
NULL,
_ecore_evas_object_cursor_set,
+ _ecore_evas_object_cursor_unset,
NULL,
NULL,
NULL,
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
index 424a5aa87a..47fd54dd6f 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
@@ -1212,6 +1212,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
void
+_ecore_evas_wl_common_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+void
_ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x, y, fx, fy;
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
index dc3428bf58..46003e8555 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
@@ -51,6 +51,7 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
_ecore_evas_wl_common_size_base_set,
_ecore_evas_wl_common_size_step_set,
_ecore_evas_wl_common_object_cursor_set,
+ _ecore_evas_wl_common_object_cursor_unset,
_ecore_evas_wl_common_layer_set,
NULL, // focus set
_ecore_evas_wl_common_iconified_set,
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
index 905aa261d8..98e2624936 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h
@@ -63,6 +63,7 @@ void _ecore_evas_wl_common_size_base_set(Ecore_Evas *ee, int w, int h);
void _ecore_evas_wl_common_size_step_set(Ecore_Evas *ee, int w, int h);
void _ecore_evas_wl_common_aspect_set(Ecore_Evas *ee, double aspect);
void _ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
+void _ecore_evas_wl_common_object_cursor_unset(Ecore_Evas *ee);
void _ecore_evas_wl_common_layer_set(Ecore_Evas *ee, int layer);
void _ecore_evas_wl_common_iconified_set(Ecore_Evas *ee, Eina_Bool on);
void _ecore_evas_wl_common_maximized_set(Ecore_Evas *ee, Eina_Bool on);
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
index 42e3ec41d3..9355e50b03 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
@@ -51,6 +51,7 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
_ecore_evas_wl_common_size_base_set,
_ecore_evas_wl_common_size_step_set,
_ecore_evas_wl_common_object_cursor_set,
+ _ecore_evas_wl_common_object_cursor_unset,
_ecore_evas_wl_common_layer_set,
NULL, // focus set
_ecore_evas_wl_common_iconified_set,
diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
index 933345584a..36587b96a2 100644
--- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
+++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
@@ -821,7 +821,13 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
ee = data;
if (ee) ee->prop.cursor.object = NULL;
}
-
+
+static void
+_ecore_evas_win32_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
static void
_ecore_evas_win32_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
@@ -1131,6 +1137,7 @@ static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
_ecore_evas_win32_size_base_set,
_ecore_evas_win32_size_step_set,
_ecore_evas_win32_cursor_set,
+ _ecore_evas_win32_cursor_unset,
NULL, /* _ecore_evas_x_layer_set */
_ecore_evas_win32_focus_set,
_ecore_evas_win32_iconified_set,
diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index 60c623f71d..31d5108075 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -2979,6 +2979,12 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
+_ecore_evas_x_object_cursor_unset(Ecore_Evas *ee)
+{
+ evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
+}
+
+static void
_ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
{
int x = 0, y = 0;
@@ -3552,6 +3558,7 @@ static Ecore_Evas_Engine_Func _ecore_x_engine_func =
_ecore_evas_x_size_base_set,
_ecore_evas_x_size_step_set,
_ecore_evas_x_object_cursor_set,
+ _ecore_evas_x_object_cursor_unset,
_ecore_evas_x_layer_set,
_ecore_evas_x_focus_set,
_ecore_evas_x_iconified_set,