fix segv with delete_me states

SVN revision: 49659
This commit is contained in:
Hannes Janetzek 2010-06-13 01:05:24 +00:00
parent 8610b9eaa9
commit 51e29b8873
2 changed files with 17 additions and 10 deletions

View File

@ -756,7 +756,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge)
e_win_borderless_set(win->ewin, 1);
e_win_no_remember_set(win->ewin, 1);
e_win_placed_set(win->ewin, 1);
ecore_evas_override_set(win->ewin->ecore_evas, 1);
ecore_evas_override_set(win->ewin->ecore_evas, 1);
win->evas = e_win_evas_get(win->ewin);
win->zone = zone;
win->ewin->data = win;
@ -770,7 +770,7 @@ _evry_window_new(E_Zone *zone, E_Zone_Edge edge)
(!strcmp(shape_option, "1")))
{
win->shaped = EINA_TRUE;
if (e_config->use_composite)
{
ecore_evas_alpha_set(win->ewin->ecore_evas, 1);
@ -2531,23 +2531,28 @@ _clear_timer(void *data)
static void
_evry_state_clear(Evry_Window *win)
{
Evry_State *s;
Evry_View *v;
if (!win->state_clearing)
return;
Evry_State *s = win->state_clearing;
Evry_View *v = s->view;
s = win->state_clearing;
win->state_clearing = NULL;
ecore_timer_del(s->clear_timer);
s->clear_timer = NULL;
if (s->delete_me)
{
v->destroy(v);
if (s->view)
s->view->destroy(s->view);
s->clear_timer = NULL;
E_FREE(s->inp);
E_FREE(s);
}
else
else if ((v = s->view))
{
s->clear_timer = NULL;
v->clear(v);
if (v->o_list)
@ -2557,8 +2562,6 @@ _evry_state_clear(Evry_Window *win)
}
}
win->state_clearing = NULL;
/* replay mouse down to allow direct sliding back */
if (win->mouse_button)
evas_event_feed_mouse_down(win->evas, win->mouse_button, 0, 0, NULL);
@ -2592,7 +2595,8 @@ _evry_view_hide(Evry_Window *win, Evry_View *v, int slide)
evas_object_show(v->o_list);
edje_object_signal_emit(v->o_list, "e,action,hide,list", "e");
v->state->clear_timer = ecore_timer_add(0.3, _clear_timer, win);
/* FIXME get signal from theme when anim finished */
v->state->clear_timer = ecore_timer_add(0.5, _clear_timer, win);
if (v->o_bar)
{

View File

@ -111,6 +111,9 @@ _tabs_update(Tab_View *v)
Evas_Object *o;
int cur = 0, i = 0;
if (s->delete_me)
return;
edje_object_calc_force(v->o_tabs);
evas_object_geometry_get(v->o_tabs, &x, NULL, &w, NULL);