Add traps in toolbar widget to make sure obj & wd are valid.

Add traps in e_fwin to make sure we have a toolbar before trying to
operate on it.



SVN revision: 55792
This commit is contained in:
Christopher Michael 2011-01-01 15:51:09 +00:00
parent 71d8f97aff
commit 645ad54f55
2 changed files with 75 additions and 37 deletions

View File

@ -103,7 +103,8 @@ e_widget_toolbar_item_append(Evas_Object *obj, Evas_Object *icon, const char *la
Item *it; Item *it;
Evas_Coord mw = 0, mh = 0, vw = 0, vh = 0; Evas_Coord mw = 0, mh = 0, vw = 0, vh = 0;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
o = edje_object_add(evas_object_evas_get(obj)); o = edje_object_add(evas_object_evas_get(obj));
e_theme_edje_object_set(o, "base/theme/widgets", e_theme_edje_object_set(o, "base/theme/widgets",
"e/widgets/toolbar/item"); "e/widgets/toolbar/item");
@ -150,7 +151,8 @@ e_widget_toolbar_item_remove(Evas_Object *obj, int num)
E_Widget_Data *wd; E_Widget_Data *wd;
Item *it; Item *it;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
it = eina_list_nth(wd->items, num); it = eina_list_nth(wd->items, num);
if (it) if (it)
{ {
@ -169,7 +171,8 @@ e_widget_toolbar_item_select(Evas_Object *obj, int num)
Item *it = NULL; Item *it = NULL;
int i = 0; int i = 0;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
EINA_LIST_FOREACH(wd->items, l, it) EINA_LIST_FOREACH(wd->items, l, it)
{ {
if (i == num) if (i == num)
@ -190,7 +193,8 @@ e_widget_toolbar_item_label_set(Evas_Object *obj, int num, const char *label)
E_Widget_Data *wd = NULL; E_Widget_Data *wd = NULL;
Item *it = NULL; Item *it = NULL;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
it = eina_list_nth(wd->items, num); it = eina_list_nth(wd->items, num);
if (it) if (it)
{ {
@ -214,7 +218,8 @@ e_widget_toolbar_scrollable_set(Evas_Object *obj, Eina_Bool scrollable)
E_Widget_Data *wd; E_Widget_Data *wd;
Evas_Coord mw = 0, mh = 0, vw = 0, vh = 0; Evas_Coord mw = 0, mh = 0, vw = 0, vh = 0;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
wd->scrollable = scrollable; wd->scrollable = scrollable;
e_box_size_min_get(wd->o_box, &mw, &mh); e_box_size_min_get(wd->o_box, &mw, &mh);
evas_object_resize(wd->o_box, mw, mh); evas_object_resize(wd->o_box, mw, mh);
@ -232,7 +237,8 @@ e_widget_toolbar_focus_steal_set(Evas_Object *obj, Eina_Bool steal)
{ {
E_Widget_Data *wd; E_Widget_Data *wd;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
if (wd->focus_steal == steal) return; if (wd->focus_steal == steal) return;
if (steal) if (steal)
{ {
@ -256,7 +262,8 @@ e_widget_toolbar_clear(Evas_Object *obj)
E_Widget_Data *wd = NULL; E_Widget_Data *wd = NULL;
Item *it = NULL; Item *it = NULL;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
EINA_LIST_FREE(wd->items, it) EINA_LIST_FREE(wd->items, it)
{ {
evas_object_del(it->o_base); evas_object_del(it->o_base);
@ -273,7 +280,8 @@ e_widget_toolbar_item_selected_get(Evas_Object *obj)
Item *it = NULL; Item *it = NULL;
int i = 0; int i = 0;
wd = e_widget_data_get(obj); if (!obj) return 0;
if (!(wd = e_widget_data_get(obj))) return 0;
EINA_LIST_FOREACH(wd->items, l, it) EINA_LIST_FOREACH(wd->items, l, it)
{ {
if (it->selected) return i; if (it->selected) return i;
@ -289,7 +297,8 @@ _e_wid_del_hook(Evas_Object *obj)
E_Widget_Data *wd; E_Widget_Data *wd;
Item *it; Item *it;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
EINA_LIST_FREE(wd->items, it) EINA_LIST_FREE(wd->items, it)
{ {
evas_object_del(it->o_base); evas_object_del(it->o_base);
@ -304,7 +313,8 @@ _e_wid_disable_hook(Evas_Object *obj)
{ {
E_Widget_Data *wd; E_Widget_Data *wd;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
if (e_widget_disabled_get(obj)) if (e_widget_disabled_get(obj))
edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_base), edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_base),
"e,state,disabled", "e"); "e,state,disabled", "e");
@ -341,7 +351,7 @@ _e_wid_signal_prev(void *data, Evas_Object *obj __UNUSED__, const char *emission
Eina_List *l, *l2; Eina_List *l, *l2;
Item *it = NULL, *it2 = NULL; Item *it = NULL, *it2 = NULL;
wd = e_widget_data_get(data); if (!(wd = e_widget_data_get(data))) return;
if ((!wd->o_base) || (!wd->o_box)) return; if ((!wd->o_base) || (!wd->o_box)) return;
EINA_LIST_FOREACH(wd->items, l, it) EINA_LIST_FOREACH(wd->items, l, it)
{ {
@ -366,7 +376,7 @@ _e_wid_signal_next(void *data, Evas_Object *obj __UNUSED__, const char *emission
Eina_List *l, *l2; Eina_List *l, *l2;
Item *it = NULL, *it2 = NULL; Item *it = NULL, *it2 = NULL;
wd = e_widget_data_get(data); if (!(wd = e_widget_data_get(data))) return;
if ((!wd->o_base) || (!wd->o_box)) return; if ((!wd->o_base) || (!wd->o_box)) return;
EINA_LIST_FOREACH(wd->items, l, it) EINA_LIST_FOREACH(wd->items, l, it)
{ {
@ -392,7 +402,7 @@ _e_wid_cb_scrollframe_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __
Eina_List *l; Eina_List *l;
Item *it; Item *it;
wd = e_widget_data_get(data); if (!(wd = e_widget_data_get(data))) return;
if ((!wd->o_base) || (!wd->o_box)) return; if ((!wd->o_base) || (!wd->o_box)) return;
e_scrollframe_child_viewport_size_get(wd->o_base, &vw, &vh); e_scrollframe_child_viewport_size_get(wd->o_base, &vw, &vh);
@ -486,7 +496,8 @@ _e_wid_focus_hook(Evas_Object *obj)
{ {
E_Widget_Data *wd; E_Widget_Data *wd;
wd = e_widget_data_get(obj); if (!obj) return;
if (!(wd = e_widget_data_get(obj))) return;
if (e_widget_focus_get(obj)) if (e_widget_focus_get(obj))
{ {
edje_object_signal_emit(wd->o_base, "e,state,focused", "e"); edje_object_signal_emit(wd->o_base, "e,state,focused", "e");

View File

@ -52,9 +52,10 @@ struct _E_Fwin_Page
Evas_Object *fm_obj; Evas_Object *fm_obj;
E_Toolbar *tbar; E_Toolbar *tbar;
struct { struct
Evas_Coord x, y, max_x, max_y, w, h; {
} fm_pan, fm_pan_last; Evas_Coord x, y, max_x, max_y, w, h;
} fm_pan, fm_pan_last;
int index; int index;
}; };
@ -558,12 +559,12 @@ _e_fwin_page_new(E_Fwin *fwin)
/* There is no toolbar yet */ /* There is no toolbar yet */
fwin->tb_obj = e_widget_toolbar_add(evas_object_evas_get(page->fm_obj), fwin->tb_obj = e_widget_toolbar_add(evas_object_evas_get(page->fm_obj),
48 * e_scale, 48 * e_scale); 48 * e_scale, 48 * e_scale);
e_widget_toolbar_focus_steal_set(fwin->tb_obj, 0); e_widget_toolbar_focus_steal_set(fwin->tb_obj, 0);
real = ecore_file_file_get(e_fm2_real_path_get(page->fm_obj)); real = ecore_file_file_get(e_fm2_real_path_get(page->fm_obj));
e_widget_toolbar_item_append(fwin->tb_obj, NULL, real, e_widget_toolbar_item_append(fwin->tb_obj, NULL, real,
_e_fwin_cb_page_change, fwin, page); _e_fwin_cb_page_change, fwin, page);
evas_object_move(fwin->tb_obj, 0, 0); evas_object_move(fwin->tb_obj, 0, 0);
evas_object_show(fwin->tb_obj); evas_object_show(fwin->tb_obj);
@ -573,7 +574,7 @@ _e_fwin_page_new(E_Fwin *fwin)
fwin->pages = eina_list_append(fwin->pages, page); fwin->pages = eina_list_append(fwin->pages, page);
real = ecore_file_file_get(e_fm2_real_path_get(fwin->cur_page->fm_obj)); real = ecore_file_file_get(e_fm2_real_path_get(fwin->cur_page->fm_obj));
e_widget_toolbar_item_append(fwin->tb_obj, NULL, real, e_widget_toolbar_item_append(fwin->tb_obj, NULL, real,
_e_fwin_cb_page_change, fwin, page); _e_fwin_cb_page_change, fwin, page);
e_fm2_path_get(fwin->cur_page->fm_obj, &dev, &path); e_fm2_path_get(fwin->cur_page->fm_obj, &dev, &path);
e_fm2_path_set(page->fm_obj, dev, path); e_fm2_path_set(page->fm_obj, dev, path);
@ -625,7 +626,8 @@ _e_fwin_custom_file_path_eval(E_Fwin *fwin, Efreet_Desktop *ef, const char *prev
/* relative path to the dir */ /* relative path to the dir */
else else
{ {
snprintf(buf, sizeof(buf), "%s/%s", e_fm2_real_path_get(fwin->cur_page->fm_obj), res); snprintf(buf, sizeof(buf), "%s/%s",
e_fm2_real_path_get(fwin->cur_page->fm_obj), res);
ret = eina_stringshare_add(buf); ret = eina_stringshare_add(buf);
} }
return ret; return ret;
@ -717,14 +719,14 @@ _e_fwin_desktop_run(Efreet_Desktop *desktop, E_Fwin_Page *page, Eina_Bool skip_h
_e_fwin_file_exec(page, ici, ext); _e_fwin_file_exec(page, ici, ext);
if (buf[0] != 0) if (buf[0] != 0)
{ {
if (ici->mime && desktop && !skip_history) if ((ici->mime) && (desktop) && !(skip_history))
e_exehist_mime_desktop_add(ici->mime, desktop); e_exehist_mime_desktop_add(ici->mime, desktop);
files = eina_list_append(files, strdup(ici->file)); files = eina_list_append(files, strdup(ici->file));
} }
} }
eina_list_free(selected); eina_list_free(selected);
if (fwin->win && desktop) if ((fwin->win) && (desktop))
e_exec(fwin->win->border->zone, desktop, NULL, files, "fwin"); e_exec(fwin->win->border->zone, desktop, NULL, files, "fwin");
else if (fwin->zone && desktop) else if (fwin->zone && desktop)
e_exec(fwin->zone, desktop, NULL, files, "fwin"); e_exec(fwin->zone, desktop, NULL, files, "fwin");
@ -1286,10 +1288,18 @@ _e_fwin_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
page = fwin->cur_page; page = fwin->cur_page;
if (fwin->page_index > 0) if (fwin->page_index > 0)
e_widget_toolbar_item_select(fwin->tb_obj, fwin->page_index - 1); {
if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj,
fwin->page_index - 1);
}
else else
e_widget_toolbar_item_select(fwin->tb_obj, 1); {
e_widget_toolbar_item_remove(fwin->tb_obj, page->index); if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj, 1);
}
if (fwin->tb_obj)
e_widget_toolbar_item_remove(fwin->tb_obj, page->index);
fwin->pages = eina_list_remove(fwin->pages, page); fwin->pages = eina_list_remove(fwin->pages, page);
_e_fwin_page_free(page); _e_fwin_page_free(page);
EINA_LIST_FOREACH(fwin->pages, l, page) EINA_LIST_FOREACH(fwin->pages, l, page)
@ -1297,7 +1307,8 @@ _e_fwin_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
} }
else if (count > 1) else if (count > 1)
{ {
evas_object_del(fwin->tb_obj); if (fwin->tb_obj)
evas_object_del(fwin->tb_obj);
fwin->tb_obj = NULL; fwin->tb_obj = NULL;
fwin->page_index = 0; fwin->page_index = 0;
fwin->pages = eina_list_remove(fwin->pages, fwin->cur_page); fwin->pages = eina_list_remove(fwin->pages, fwin->cur_page);
@ -1324,21 +1335,37 @@ _e_fwin_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
if (!strcmp(ev->key, "Tab")) if (!strcmp(ev->key, "Tab"))
{ {
Eina_List *l; Eina_List *l;
if (evas_key_modifier_is_set(ev->modifiers, "Shift")) if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
{ {
l = eina_list_nth_list(fwin->pages, fwin->page_index); l = eina_list_nth_list(fwin->pages, fwin->page_index);
if (l->prev) if (l->prev)
e_widget_toolbar_item_select(fwin->tb_obj, fwin->page_index - 1); {
if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj,
fwin->page_index - 1);
}
else else
e_widget_toolbar_item_select(fwin->tb_obj, eina_list_count(fwin->pages) - 1); {
if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj,
eina_list_count(fwin->pages) - 1);
}
} }
else else
{ {
l = eina_list_nth_list(fwin->pages, fwin->page_index); l = eina_list_nth_list(fwin->pages, fwin->page_index);
if (l->next) if (l->next)
e_widget_toolbar_item_select(fwin->tb_obj, fwin->page_index + 1); {
if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj,
fwin->page_index + 1);
}
else else
e_widget_toolbar_item_select(fwin->tb_obj, 0); {
if (fwin->tb_obj)
e_widget_toolbar_item_select(fwin->tb_obj, 0);
}
} }
return; return;
} }