From 072f4b664f0db646c44f89fd4c46dd3b15540d7d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 15 Aug 2009 11:32:32 +0000 Subject: [PATCH] fix evas error debug where passing in null objects is bad. SVN revision: 41788 --- src/bin/e_menu.c | 2 +- src/bin/e_pan.c | 19 +++++++++++----- src/bin/e_scrollframe.c | 49 +++++++++++++++++++++++++++++++---------- src/bin/e_widget.c | 16 +++++++++----- 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index b355521c3..7cbbbfd8f 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -1680,7 +1680,7 @@ _e_menu_items_layout_update(E_Menu *m) static void _e_menu_item_unrealize(E_Menu_Item *mi) { - e_box_freeze(mi->container_object); + if (mi->container_object) e_box_freeze(mi->container_object); if (mi->separator_object) evas_object_del(mi->separator_object); mi->separator_object = NULL; if (mi->bg_object) evas_object_del(mi->bg_object); diff --git a/src/bin/e_pan.c b/src/bin/e_pan.c index 86a88edae..91ea6cd02 100644 --- a/src/bin/e_pan.c +++ b/src/bin/e_pan.c @@ -150,6 +150,7 @@ _e_smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_in Evas_Coord w, h; sd = data; + if (!sd->child_obj) return; evas_object_geometry_get(sd->child_obj, NULL, NULL, &w, &h); if ((w != sd->child_w) || (h != sd->child_h)) { @@ -163,7 +164,8 @@ _e_smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_in static void _e_smart_reconfigure(E_Smart_Data *sd) { - evas_object_move(sd->child_obj, sd->x - sd->px, sd->y - sd->py); + if (sd->child_obj) + evas_object_move(sd->child_obj, sd->x - sd->px, sd->y - sd->py); } static void @@ -212,35 +214,40 @@ static void _e_smart_show(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_show(sd->child_obj); + if (sd->child_obj) + evas_object_show(sd->child_obj); } static void _e_smart_hide(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_hide(sd->child_obj); + if (sd->child_obj) + evas_object_hide(sd->child_obj); } static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) { INTERNAL_ENTRY; - evas_object_color_set(sd->child_obj, r, g, b, a); + if (sd->child_obj) + evas_object_color_set(sd->child_obj, r, g, b, a); } static void _e_smart_clip_set(Evas_Object *obj, Evas_Object *clip) { INTERNAL_ENTRY; - evas_object_clip_set(sd->child_obj, clip); + if (sd->child_obj) + evas_object_clip_set(sd->child_obj, clip); } static void _e_smart_clip_unset(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_clip_unset(sd->child_obj); + if (sd->child_obj) + evas_object_clip_unset(sd->child_obj); } /* never need to touch this */ diff --git a/src/bin/e_scrollframe.c b/src/bin/e_scrollframe.c index a4368d2b8..32fc9053e 100644 --- a/src/bin/e_scrollframe.c +++ b/src/bin/e_scrollframe.c @@ -114,9 +114,12 @@ e_scrollframe_child_set(Evas_Object *obj, Evas_Object *child) API_ENTRY return; if (sd->child_obj) { - e_pan_child_set(sd->pan_obj, NULL); - evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, - _e_smart_child_del_hook); + if (sd->pan_obj) + { + e_pan_child_set(sd->pan_obj, NULL); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, + _e_smart_child_del_hook); + } } sd->child_obj = child; @@ -229,6 +232,7 @@ e_scrollframe_child_pos_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) double vx, vy; API_ENTRY return; + if (!sd->pan_obj) return; sd->pan_func.max_get(sd->pan_obj, &mx, &my); if (mx > 0) vx = (double)x / (double)mx; else vx = 0.0; @@ -247,7 +251,13 @@ EAPI void e_scrollframe_child_pos_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) { API_ENTRY return; - sd->pan_func.get(sd->pan_obj, x, y); + if (sd->pan_obj) + sd->pan_func.get(sd->pan_obj, x, y); + else + { + *x = 0; + *y = 0; + } } EAPI void @@ -256,6 +266,7 @@ e_scrollframe_child_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Ev Evas_Coord mx = 0, my = 0, cw = 0, ch = 0, px = 0, py = 0, nx, ny; API_ENTRY return; + if (!sd->pan_obj) return; sd->pan_func.max_get(sd->pan_obj, &mx, &my); sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch); sd->pan_func.get(sd->pan_obj, &px, &py); @@ -406,6 +417,7 @@ _e_smart_pan_changed_hook(void *data, Evas_Object *obj __UNUSED__, void *event_i E_Smart_Data *sd; sd = data; + if (!sd->pan_obj) return; sd->pan_func.child_size_get(sd->pan_obj, &w, &h); if ((w != sd->child.w) || (h != sd->child.h)) { @@ -422,6 +434,7 @@ _e_smart_pan_pan_changed_hook(void *data, Evas_Object *obj __UNUSED__, void *eve E_Smart_Data *sd; sd = data; + if (!sd->pan_obj) return; sd->pan_func.get(sd->pan_obj, &x, &y); e_scrollframe_child_pos_set(sd->smart_obj, x, y); } @@ -655,6 +668,7 @@ _e_smart_event_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE sd = data; ev = event_info; e_scrollframe_child_pos_get(sd->smart_obj, &x, &y); + if (!sd->pan_obj) return; sd->pan_func.max_get(sd->pan_obj, &mx, &my); edje_object_part_geometry_get(sd->edje_obj, "e.swallow.content", NULL, NULL, &vw, &vh); if (!strcmp(ev->keyname, "Left")) @@ -694,10 +708,12 @@ _e_smart_scrollbar_read(E_Smart_Data *sd) edje_object_part_drag_value_get(sd->edje_obj, "e.dragable.vbar", NULL, &vy); edje_object_part_drag_value_get(sd->edje_obj, "e.dragable.hbar", &vx, NULL); + if (!sd->pan_obj) return; sd->pan_func.max_get(sd->pan_obj, &mx, &my); x = vx * (double)mx; y = vy * (double)my; - sd->pan_func.set(sd->pan_obj, x, y); + if (sd->pan_obj) + sd->pan_func.set(sd->pan_obj, x, y); if (((e_config->thumbscroll_enable) || (sd->thumbscroll.forced)) && (sd->down.now) && (!sd->down.dragged)) sd->down.now = 0; @@ -713,7 +729,8 @@ _e_smart_scrollbar_reset(E_Smart_Data *sd) edje_object_part_drag_size_set(sd->edje_obj, "e.dragable.vbar", 1.0, 1.0); edje_object_part_drag_size_set(sd->edje_obj, "e.dragable.hbar", 1.0, 1.0); } - sd->pan_func.set(sd->pan_obj, 0, 0); + if (sd->pan_obj) + sd->pan_func.set(sd->pan_obj, 0, 0); } static int @@ -904,9 +921,12 @@ _e_smart_scrollbar_size_adjust(E_Smart_Data *sd) &vx, NULL); edje_object_part_drag_value_get(sd->edje_obj, "e.dragable.vbar", NULL, &vy); - sd->pan_func.max_get(sd->pan_obj, &mx, &my); - x = vx * mx; - y = vy * my; + if (sd->pan_obj) + { + sd->pan_func.max_get(sd->pan_obj, &mx, &my); + x = vx * mx; + y = vy * my; + } edje_object_part_drag_step_set(sd->edje_obj, "e.dragable.hbar", (double)sd->step.x / (double)w, 0.0); @@ -925,7 +945,8 @@ _e_smart_scrollbar_size_adjust(E_Smart_Data *sd) edje_object_part_drag_page_set(sd->edje_obj, "e.dragable.vbar", 0.0, -((double)sd->page.y * ((double)vh / (double)h)) / 100.0); - sd->pan_func.set(sd->pan_obj, x, y); + if (sd->pan_obj) + sd->pan_func.set(sd->pan_obj, x, y); } else { @@ -933,7 +954,8 @@ _e_smart_scrollbar_size_adjust(E_Smart_Data *sd) 1.0, 1.0); edje_object_part_drag_size_set(sd->edje_obj, "e.dragable.hbar", 1.0, 1.0); - sd->pan_func.set(sd->pan_obj, 0, 0); + if (sd->pan_obj) + sd->pan_func.set(sd->pan_obj, 0, 0); } _e_smart_scrollbar_bar_visibility_adjust(sd); } @@ -1013,7 +1035,10 @@ _e_smart_del(Evas_Object *obj) { INTERNAL_ENTRY; e_scrollframe_child_set(obj, NULL); - if (!sd->extern_pan) evas_object_del(sd->pan_obj); + if (sd->pan_obj) + { + if (!sd->extern_pan) evas_object_del(sd->pan_obj); + } evas_object_del(sd->edje_obj); evas_object_del(sd->event_obj); if (sd->down.momentum_animator) diff --git a/src/bin/e_widget.c b/src/bin/e_widget.c index 2d669c61c..3a4145a14 100644 --- a/src/bin/e_widget.c +++ b/src/bin/e_widget.c @@ -416,6 +416,7 @@ EAPI void e_widget_change(Evas_Object *obj) { API_ENTRY return; + if (!e_widget_parent_get(obj)) return; e_widget_change(e_widget_parent_get(obj)); if (sd->on_change_func) sd->on_change_func(sd->on_change_data, obj); } @@ -532,35 +533,40 @@ static void _e_smart_show(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_show(sd->resize_obj); + if (sd->resize_obj) + evas_object_show(sd->resize_obj); } static void _e_smart_hide(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_hide(sd->resize_obj); + if (sd->resize_obj) + evas_object_hide(sd->resize_obj); } static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) { INTERNAL_ENTRY; - evas_object_color_set(sd->resize_obj, r, g, b, a); + if (sd->resize_obj) + evas_object_color_set(sd->resize_obj, r, g, b, a); } static void _e_smart_clip_set(Evas_Object *obj, Evas_Object *clip) { INTERNAL_ENTRY; - evas_object_clip_set(sd->resize_obj, clip); + if (sd->resize_obj) + evas_object_clip_set(sd->resize_obj, clip); } static void _e_smart_clip_unset(Evas_Object *obj) { INTERNAL_ENTRY; - evas_object_clip_unset(sd->resize_obj); + if (sd->resize_obj) + evas_object_clip_unset(sd->resize_obj); } /* never need to touch this */